メッセージの暗号化と復号化

NEMはメッセージの暗号化と復号化にあたって、Bouncy CastleのAESブロック暗号実装をCBCモード4で利用しています。

仮に、アリスが秘密鍵kAk_Aを持ち、公開鍵AB\underline{A_B}(これは元ABA_Bに対応します)をもつボブに対してのメッセージを暗号化したいとします。 その場合、暗号化経路をセットアップするのに必要な共有鍵は以下のようにして計算されます。

  1. aAa_Aを等式(2)に基づいて計算
  2. 32バイトのランダムな値saltsaltを作成
  3. G=aAABG = a_AA_B
  4. 共有鍵=H~(Gsalt)= \tilde{H}(\underline{G} \underline{\lor} salt)

ただしH~\tilde{H}は256ビットSHA3ハッシュ関数です。

さらに、ランダムな16バイトが初期化ベクトルとして用いられます。 従って、暗号化されたメッセージのペイロードは

  1. salt
  2. 初期化ベクトル
  3. 暗号化メッセージのブロック

復号化も似たようなやり方で行われます。 ボブはアリスの公開鍵AA\underline{A_A}(と、自身の秘密鍵kBk_B)およびsaltsaltを知る必要があり、以下のようにして共有鍵を作成します。

  1. aBa_Bを等式(2)に基づいて計算
  2. G=aBAAG = a_BA_A
  3. 共有鍵=H~(Gsalt)= \tilde{H}(\underline{G} \underline{\lor} salt)

共有鍵と初期化ベクトルを暗号エンジンにあたえることで、暗号化されたメッセージを復号化します。

4. https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%88%A9%E7%94%A8%E3%83%A2%E3%83%BC%E3%83%89#CBC

results matching ""

    No results matching ""