0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

暗号化クラスで鍵をセットしてから鍵長を変更したらエラーになった、といわれても…

0
Last updated at Posted at 2026-05-31

.NetのRijndaelManagedKeySize/BlockSize Key/IVに順序依存がある、という記事がたまたま2件連続してサジェストされたので。古い記事ですが、共通する考え違いをする人がいるというのはある程度一般的な間違いなのかなと思い記事にします。

感覚的な話として、KeySize/BlockSizeKey/IVの長さを指定するものなのですから、Key/IVをセットした後にKeySize/BlockSizeをいじれば良くないことが起きても仕方が無いでしょう。

実際に何が起きたか

両例とも.NetのRijndaelManagedを使っていますが、RijndaelManaged(に限らずSymmetricAlgorithmを継承する暗号化アルゴリズム)はKeySizeをセットすると(値が変わらなくとも)Keyがランダム値で初期化されます(BlockSizeの場合は変更があった場合にIVが初期化されます)。要するに、Key => KeySizeの順で設定したコードは設定した鍵ではなくランダムな鍵で処理を行っていることになります。

なお発生したエラーの正体は下記:

「順序依存」の問題なのか

Noです。暗号化アルゴリズムの基本パラメータである鍵長やブロック長を触ればその通りの長さとなっていないといけない鍵やIVが初期化される、という当然に想定しうる挙動をしているだけです。

このような挙動についての前提知識が無かったのだとしても

  • KeySize/BlockSizeと渡そうとしているKey/IVの長さが異なったらどうなるのか
  • セットされているKey/IVと異なる長さにKeySize/BlockSizeをセットしたらセットされているKey/IVがどうなるのか

と言う疑問が普通は生じるはずです。これは暗号アルゴリズムに限らず、「バッファとバッファ長」みたいな一般論で言えることです。これが「順序依存」の問題に見えるというのはパラメータの意味を考えないまま扱っているのが原因では無いかと想像します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?