2

Polarssl AES カウンター モードの例を探しています。どこにも見つかりませんでした。

ドキュメンテーションは、私のような初心者にとって理解しにくいものです。polarssl で次のように定義されています。

int     aes_crypt_ctr (aes_context *ctx, size_t length, size_t *nc_off, unsigned char nonce_counter[16], unsigned char stream_block[16], const unsigned char *input, unsigned char *output)

私はこのように書きました

aes_context aes;

unsigned char key[32];
unsigned char iv[16];

unsigned char input [128]="Hello";
unsigned char output[128];

size_t input_len = 40;
size_t output_len = 0;

aes_setkey_enc(&aes, key, 128);


aes_crypt_ctr (&aes, 64, size_t *nc_off, unsigned char nonce_counter[16], unsigned char stream_block[16], input, output);

暗号化の呼び出しで特定のパラメーターを理解できませんでした。最小限の実例を探しています。

4

1 に答える 1

1

カウンター モード (CTR) は、CBC などのモードとは異なります。これは、不完全なブロックで動作する可能性があるためです。不完全なブロックで CBC を使用すると、多くの場合パディングされ、暗号化ストリームがすべての目的で終了します。最後にデータを追加することはできません。

CTR は、PolarSSL 内のストリーム暗号としてより意図され、実装されており、最後に追加のデータを追加できます。その結果、現在のブロック ( nc_off) 内の「場所」を指定する必要があります。

したがって、あなたがすべきことは次のとおりです。

  1. わかりやすくするためにiv名前を変更します。nonce_counter
  2. 先頭に追加size_t nc_offset = 0;します。
  3. 上に追加unsigned char stream_block[16];します。
  4. nonce_counter にランダムな値を入れます (これは nonce + nonce 内のカウンターです) CTR-DRBG のようなものを使用します。コードにランダム ジェネレーターを追加する方法については、この記事を参照してください。
  5. 単一の呼び出しを行いたい場合:ret = aes_crypt_ctr(&aes, input_len, &nc_off, nonce_counter, stream_block, input, output);

注:への呼び出しの最後にaes_crypt_ctr()、 nc_off は40 % 16 = 8になり、ストリームに余分なデータを追加する場合に使用できる8 バイトがまだ残ってstream_blockいることを示します。aes_crypt_ctr()

于 2013-12-29T11:42:31.437 に答える