• ベストアンサー

AES暗号方式について

AES暗号化方式では,秘密鍵(共通鍵)を用いてランダムに生成したセッション鍵で暗号化し,さらにそのセッション鍵を暗号化する. 復号化する場合は,逆の手順で平文に戻す と認識しています. これを踏まえて以下の質問に回答いただけると幸いです. 1.上の認識は間違っていないでしょうか? 2.暗号文を復号するには,暗号化時に生成したセッション鍵の値と秘密鍵が必要であると言えますか? 3.秘密鍵が漏れなければセッション鍵が漏れても問題ありませんか? 以上,3点についてご教授いただけると幸いです. よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • Kon1701
  • ベストアンサー率24% (1445/5856)
回答No.1

暗号通信の手順に関するご質問でしょうか? AESは共通鍵暗号ですから、何らかの方法で共通鍵を事前に交換できれば暗号化/復号できます。ただ、共通鍵を安全に渡すのは面倒だったりするので、公開鍵を使って乱数などで発生させた鍵を通信によりその都度受け渡しするのが一般的です。共通鍵が交換できれば、その後の通信はAESでのみ暗号化されます。 この場合、通信文は秘密鍵が分かっていれば復号できる可能性があります。ただ、お互いに乱数を交換して共通鍵を生成することが多いので、双方の秘密鍵と通信手順を知らないと共通鍵を生成できないかもしれません。(秘密鍵がわかれば交通鍵は推測できてしまうでしょうけど) 3番目ご質問ですが、セッション鍵(共通鍵)がわかれば復号できる可能性があります。

gottyato
質問者

補足

>共通鍵を安全に渡すのは面倒だったりするので、公開鍵を使って乱数などで発生させた鍵を通信によりその都度受け渡しするのが一般的です。 つまり,共通鍵とセッション鍵は予め決めておくか乱数で発生させるかの違いであって,用途は同一と考えて良いのでしょうか? 実際に私がテストしているシステムでは,携帯電話に共通鍵(秘密鍵)を保有しておき,サーバーへ暗号化した情報を送信→必要なときに受信&復号化というものなので,携帯電話内のメモリに共通鍵を保存しようと考えています. この際,セッション鍵を生成する必要性は無いということですよね?

その他の回答 (2)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

AESでは、秘密の共通鍵を使って暗号化と復号化を行います。 AES暗号化アルゴリズムである共通鍵を使って暗号化した暗号文は、同じ共通鍵を使ってAES復号アルゴリズムで元の平文に戻せます。 なお、共通鍵にはサイズが合っていればほとんど任意のビット列が使えます。 セッション鍵は、SSLなどで使うハイブリッド暗号方式の用語です。 SSLでは公開鍵方式の鍵をあらかじめ用意しておき、それを使ってランダムな値を交換することによりセッション鍵を作り、このセッション鍵を共通鍵として共通鍵暗号化を行います。AES等の共通鍵暗号化アルゴリズムはほとんど任意のビット列を共通鍵として使用できますから、ランダムに作成したセッション鍵を使えるわけです。 秘密の共通鍵をあらかじめ用意しておける状況なら、セッション鍵のようなランダムな値を使わなくてもAES暗号化はできます。SSLのような共通プロトコルを使うのではなく独自プロトコルで暗号化通信を行うなら、あらかじめ共通鍵を用意しておけばセッション鍵の生成は必要ありません。 ただし、秘密の共通鍵が漏れれば暗号は破られますので、その点には注意が必要です。

gottyato
質問者

お礼

おかげさまで疑問が解消されました. ありがとうございました.

  • Kon1701
  • ベストアンサー率24% (1445/5856)
回答No.2

>共通鍵とセッション鍵は予め決めておくか乱数で発生させるかの違いであって,用途は同一と考えて良いのでしょうか? ”セッション鍵”、一時的な共通鍵の意味で使われることが多いので、この認識で正しいと思います。 また、共通鍵をあらかじめ決めておく暗号通信もあります。その場合、乱数などで生成する必要はないですね。 なお、”秘密鍵”、公開鍵暗号方式の公開鍵に対する秘密鍵と思って回答していましたが、改めて読むとちょっと違う使い方かもしれませんね。私が誤解しているようなら、必要であれば補足してください。 余談: ”復号”だけで暗号文を平分に戻す意味があるので、”暗号化 - 復号”であって、復号化の”化”は本来は余分なのですが、いつの間にか”復号化”が書籍も含めて多く使われていますね・・・。個人的には違和感があります。

gottyato
質問者

お礼

疑問にお答えいただき,ありがとうございました. 携帯電話での暗号化は残念ながら諦めてしまいましたが,データベース側で暗号化することができましたので,そちらを利用しました. >なお、”秘密鍵”、公開鍵暗号方式の公開鍵に対する秘密鍵と思って回答していました すみません.秘密鍵というとおっしゃるとおり公開鍵暗号の公開鍵に対する秘密鍵を指すようですね. 質問当時,私は共通鍵暗号の共通鍵の意味で秘密鍵を使用していました. 混乱させてしまって申し訳ありませんでした.

関連するQ&A