Files asks for your Flamenet passphrase, not a second secret
Reported: "on android, the files passcode should just reuse the account like ios does." 🔴 **The difference was entirely in the words, and iOS has been right all along.** iOS says "your passphrase" and takes whatever is typed, so a person naturally uses their Flamenet one and it simply works. Android said the files were "encrypted with a passphrase of their own", labelled the field "Choose a passphrase", and later asked for "your Files passphrase" — three separate places telling somebody to invent, and then remember, a second secret. ⚠️ **Forgetting it is a one-way door.** The label keys are derived from the identity that passphrase protects and exist nowhere else, so a forgotten Files passphrase makes every vaulted file permanently unreadable. Sending people off to mint an extra secret for no reason put them one lapse of memory from that, and the app already has a paragraph explaining the consequence. ⚠️ **Nothing in the derivation changed, deliberately.** It is still a free-choice string protecting the identity record, so anyone who already set a different one keeps opening their files with it exactly as before. Making the account passphrase the ACTUAL key would be a migration with permanent data loss on the far side of any mistake, and it is not what was asked for. That also means the copy IS the feature here, so a copy guard is the only guard there can be. Proven by reverting the wording: both tests go red naming the file and the phrase. 1194 tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
de968ac1aa
commit
571c18571f
@@ -773,7 +773,7 @@ fun ColumnScope.AccountScreen(
|
||||
Text("Files", fontWeight = FontWeight.Medium, fontSize = 16.sp)
|
||||
Spacer(Modifier.height(Space.xs))
|
||||
Text(
|
||||
"Files encrypted on this phone, with a passphrase of their own. "
|
||||
"Files encrypted on this phone, opened with your Flamenet passphrase. "
|
||||
+ "Nothing is stored on a server.",
|
||||
fontSize = 13.sp,
|
||||
color = Palette.SecondaryText,
|
||||
|
||||
@@ -118,10 +118,22 @@ private fun ColumnScope.FilesSetUp(
|
||||
var passphrase by remember { mutableStateOf("") }
|
||||
var again by remember { mutableStateOf("") }
|
||||
|
||||
// 🔴 **"A passphrase of their own" told people to invent a second secret,
|
||||
// and iOS never did.** iOS says "your passphrase" and takes whatever is
|
||||
// typed, so a person naturally uses their Flamenet one and it simply
|
||||
// works. Android's copy sent them off to make up something else, then
|
||||
// asked for it again weeks later — and forgetting it is the one-way door
|
||||
// described above this function.
|
||||
//
|
||||
// ⚠️ **Nothing about the derivation changes.** This is still a free-choice
|
||||
// string protecting the identity record, so anyone who already set a
|
||||
// different one keeps opening their files with it. Making the account
|
||||
// passphrase the ACTUAL key would be a migration with permanent data loss
|
||||
// on the far side of any mistake, and it is not what this fixes.
|
||||
Text(
|
||||
"Files on this phone are encrypted with a passphrase of their own. "
|
||||
+ "Flamenet doesn't keep it, so nobody can open them by picking up "
|
||||
+ "your unlocked phone.",
|
||||
"Use your Flamenet passphrase — the one you sign in with. Files on "
|
||||
+ "this phone are encrypted with it, and Flamenet keeps no copy, so "
|
||||
+ "nobody can open them by picking up your unlocked phone.",
|
||||
fontSize = 14.sp, color = Palette.SecondaryText,
|
||||
)
|
||||
Spacer(Modifier.height(Space.sm))
|
||||
@@ -134,7 +146,7 @@ private fun ColumnScope.FilesSetUp(
|
||||
|
||||
OutlinedTextField(
|
||||
value = passphrase, onValueChange = { passphrase = it },
|
||||
label = { Text("Choose a passphrase") },
|
||||
label = { Text("Your Flamenet passphrase") },
|
||||
visualTransformation = PasswordVisualTransformation(),
|
||||
singleLine = true,
|
||||
modifier = Modifier.fillMaxWidth().testTag("files-new-passphrase"),
|
||||
@@ -168,7 +180,10 @@ private fun ColumnScope.FilesUnlock(
|
||||
) {
|
||||
var passphrase by remember { mutableStateOf("") }
|
||||
|
||||
Text("Enter your Files passphrase to open them.",
|
||||
// ⚠️ Not "your Files passphrase". That name implied a second secret even
|
||||
// for somebody who had used their Flamenet one, and left them hunting for
|
||||
// a passphrase they never set.
|
||||
Text("Enter your Flamenet passphrase to open them.",
|
||||
fontSize = 14.sp, color = Palette.SecondaryText)
|
||||
Spacer(Modifier.height(Space.md))
|
||||
OutlinedTextField(
|
||||
|
||||
Reference in New Issue
Block a user