2016-12-14 28 views
2

redux-persistredux-persist-transform-encryptを使用して、デバイスに暗号化されたアプリ状態を保存するReact Nativeアプリを構築しています。 redux-persist-transform-encryptCryptoJsを使用してAES経由でデータを暗号化します。CryptoJS.AES.encrypt('serialized app state', 'some-secret-key')React Native redux-persist暗号鍵の生成

私の質問:(私は暗号の初心者です)some-secret-keyを生成するためのベストプラクティスはありますか?私の計画は、アプリが最初に起動し、それをデバイスのキーチェーンに安全に保存するときに、このキーをランダムに生成することです。

我々が使用
+0

間違いない答えが、[この議論] (https://github.com/rt2zz/redux-persist/issues/274#issuecomment-278891540)こちらをご覧ください。 –

答えて

0

キーを確実にするために、ランダムなキーを生成し保存するためのネイティブキーホルダー反応し、攻撃者がファイルシステムへのアクセス権を持っている場合でも、取得するのは難しいです:

let secretKey 

async function getSecretKey() { 
    let {password} = await Keychain.getGenericPassword() 
    if (!password) { 
    password = generateRandomKey() 
    await Keychain.setGenericPassword(appName, password) 
    } 
    return password 
} 

const encrypt = async function(state) { 
    if (!secretKey) { 
    secretKey = await getSecretKey() 
    } 

    if (typeof state !== 'string') { 
    state = stringify(state); 
    } 

    return CryptoJS.AES.encrypt(state, secretKey).toString() 
} 
関連する問題