Rubyのsjcl.jsで作成したAESの復号化
概要
こんにちは。クライアント側には、暗号化されたデータと同じチャネルを介して転送されないキーがあると仮定します。
私が達成しようとしているのは、Stanford Javascript Crypto Library (sjcl) の結果を Ruby で復号化することです。または、AES をサポートする暗号ライブラリを備えた他の言語での一般化。
私がJavaScriptでやっていることは次のとおりです。
sjcl.encrypt('stack-password', 'overflow-secret')
そして、これが私がお返しに受け取るものです:
{
"iv": "Tbn0mZxQcroWnq4g/Pm+Gg",
"v": 1,
"iter": 1000,
"ks": 128,
"ts": 64,
"mode": "ccm",
"adata": "",
"cipher": "aes",
"salt": "pMQh7m9Scds",
"ct": "H6JRpgSdEzKUw2qEO1+HwIzAdxGTgh0"
}
それで、私が実際に尋ねているのは、サーバー側のシークレットを復号化するために(サーバーがすでに「stack-password」キーを持っていると仮定して)これらのパラメータのうちどれが必要で、どのライブラリを使用する必要があるかということです。 AES 復号化ライブラリだけでは十分ではないでしょうか?
解決策
以下については、事前にネゴシエートする (またはハードコードする) ことはできません。
以下では、事前にネゴシエートする (またはハードコードする) ことができます。実際、認証されずに送信され、セキュリティが期待される場合は、これらの値をサーバー暗号化 API に組み込むべきではありません。クライアントに基づいて変更可能にしたい場合、adata は v、iter、または ks にとって悪い場所ではありません。
Ruby では、OpenSSL ライブラリを使用すると、OpenSSL が AES-128-CCM で OpenSSL::Cipher.ciphers をチェックすることをサポートしている限り、機能するようです。また、pbkdf2 を使用したキーの生成はサポートされていますが、sjcl との互換性を保つために Sha256 ダイジェストを使用する必要があり、これも openssl のバージョンに依存します。