Talk:Services/Sync/SimplifiedCrypto
Jump to navigation
Jump to search
sync key representation
The sync key is represented to the user as:
X-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
Deriving encryption and HMAC keys from the Sync Key
The hmac used is an SHA-256 HMAC.
(A deep link to Utils.makeHMACKey() would be helpful here.)
Upgrading existing Sync Keys to the new AES key
example:
/** * See https://wiki.mozilla.org/Services/Sync/SimplifiedCrypto#Upgrading_existing_Sync_Keys_to_the_new_AES_key * for details on the algorithm. * @param aV3Passphrase * @return the v4 syncKey (serves the same purpose as the passphrase before) * @throws Exception see {@link #passwordToSymmetricKey(char[], byte[])} * @throws UnsupportedEncodingException should not happen (ASCII) */ public String upgradeV3PassphraseToV4SyncKey(final String aV3Passphrase) throws UnsupportedEncodingException, Exception { String salt = mSyncID; KeySpec ks = new PBEKeySpec(aV3Passphrase.toCharArray(), salt.getBytes("ASCII"), 4096, 128); PBKDF2HmacSHA1Factory f = new PBKDF2HmacSHA1Factory(); SecretKey s = f.engineGenerateSecret(ks); String base32 = biz.wolschon.android.codec.binary.Base32.encode(s.getEncoded()).toLowerCase(); String syncKey = base32.replace('l', '8').replace('o', '9'); syncKey = syncKey.charAt(0) + "-" + syncKey.substring(1, 6) + "-" + syncKey.substring(6, 11) + "-" + syncKey.substring(11, 16) + "-" + syncKey.substring(16, 21) + "-" + syncKey.substring(21, 26); Log.d(LOG_TAG, "upgraded passphrase to syncKey \"" + syncKey + "\""); return syncKey; }