2017-07-29 9 views
0

AESで暗号化されたファイルをダウンロードする際に、そのファイルを復号化する必要があります。AES解読プロセスを保存して後で復元できますか?

つまり、256バイトのデータを受け取るたびに、すぐに復号化できます。

問題は、ユーザーがダウンロードプロセスを一時停止し、後で復元できることです。 次に、新しいCCCryptorRefインスタンスを作成して、引き続き解読する必要があります。しかし、解読されたデータは間違っています。

CCCryptorRefインスタンスを完全に保存する方法はないので、後で使用できますか?

Btw、私はiOS framework apisを使用しています。 通常のAESプロセスではCCCryptorCreateWithMode()CCCryptorUpdate()CCCryptorFinal()を使用しています。

+1

本当に代わりにTLS/HTTPSを使用する必要があります。 –

答えて

2

通常、暗号を使用する操作モードがわかっている場合は、新しい暗号コンテキスト(またはその名前が何であれ、たとえばCryptor)を作成できます。

例えばCBCモードでは、暗号化したばかりの暗号文の最後の暗号ブロック(16バイト)を保存できます。次に、それを次の暗号コンテキストのIVとして使用できます。一方、CTRモードを使用する場合は、最後のカウンタ値を保存し、そのカウンタ+1で復号化を開始する必要があります。

こうして暗号コンテキストを保存/復元する必要はありません。これが、この機能がAPIに含まれていない理由です。必要な状態で新しいものを作成することができます。


操作モードの詳細については、hereを参照してください。


CBCを使用している場合:暗号文の断片の最後に詰め込まれていない部分に問題が発生することに注意してください。最後のフラグメントを解読するときには、アンパインドを実行するだけで、パッディング・オラクル攻撃に気付く必要があります。


TLSを使用して、転送中にファイルの内容を保護することが望ましい場合は、使用することをお勧めします。

+0

これはまさに私が欲しいものです、ありがとう!私はAES(CBC)を使ってファイルを暗号化/復号化しています。これらのファイルのサイズは通常100kbから500mbですから、ブロックサイズはどれくらい妥当だと思いますか? – SomeHowWhite

+1

AES **のブロックサイズ**は16バイト(128ビット)に固定されています。一度にダウンロードするデータ量の選択はあなた次第ですが、もちろん16倍の倍数にする必要があります(AESブロックサイズと区別するために「ファイル断片サイズ」と呼ぶこともできます) 。 IVに接頭辞を付けることを忘れないでください.CBC *はランダムIVを必要としますか? CBCでは、パディング・オラクルを実装しないことに二重に注意する必要があります。 –

関連する問題