Imony Project
FlashBox
トップページImonyとは

Imonyで使用するRSA公開鍵

IDとRSA公開鍵を共通にする

IDとRSA公開鍵を共通にすると鍵の長さが足りなくなりませんか。ある程度、RSA暗号を知っている人は最初に思うでしょう。そこでImonyでは解決策としてIDから長い公開鍵を生成する方法を使う事にしました。

IDの構成要素

  1. [32] MAC Hash … MAC IDをSHA-1でハッシュ化した値の一部
  2. [48] RSA Seed … このIDがRSAの公開鍵になるための数値
  3. [16] Hash … 鍵のMD5値の一部、チェックサム
  4. [32] Provider ID(※鍵には関係ありません)
ID自体は96Bitで識別することになります。
※Provider IDは通信時に優先順位を決めるための物です。これについては別所で説明します。

ユーザノードキーの定義

  1. <?
  2. // MAC IDをSHA-1でハッシュ化した最初の4Byte
  3. $node->mac_hash substr(sha1(MAC_IDtrue), 04);
  4. // MAC HASHとRSA種を結合しノードキーとする
  5. $node_key $node->mac_hash $node->rsa_seed;
  6. // ノードキーをMD5でハッシュ化した最初の2Byte
  7. $node->hash substr(md5($node_keytrue), 02);
  8. ?>

RSA公開鍵

  1. <?
  2. // MAC HASHをMD5でハッシュ化した最初の13Byte
  3. $rsa_key substr(md5($node->machashtrue), 013);
  4. // RSA鍵にRSA種を結合
  5. $rsa_key .= $node->rsa_seed;
  6. ?>
これで128Bit公開鍵ができるように、RSA種を設定します。RSA種は一般的なRSA鍵の生成に使われるミラー・ラビン(Miller-Rabin)テストを行い探索します。このテストでは極々稀に弱い鍵が発生する可能性がありますが仕様上そこまで問題ではありません。