Arc4HmacCtrl

Arc4HmacCtrl

ARC4 による暗号化と HMAC-SHA256 による MAC を行うコントローラである。

暗号方式について詳しくは解説しない。 暗号を独自に実装しない場合は、このサンプルを用いればセキュリティを確保できる。 最低限、独自の鍵を設定すること。

改造してセキュリティを高めたい場合は、まず鍵の多様性を確保する方向を勧める。 たとえばクライアント毎に異なるようなナンスやIVを含めた方が良いだろう。 また次節で説明する DH鍵交換も行いたい。

設計

encode/decode によるデータ変更を行う。 attachment やコントロールメッセージは使用しない。

ARC4 と HMAC に鍵が必要になる。 メンバ変数として保持し、設定する関数を定義する。 ARC4の鍵はメッセージ毎に変えるべきであるので、シーケンス番号を含めるようにしている。

      struct Secret {
            uint8_t cipher[CIPHER_TOTAL_KEYLEN];
            uint8_t hmac[HMAC_KEYLEN];
      };
   protected:
      void setEncodeSecret(const uint8_t p[SECRET_LEN]);
      void setDecodeSecret(const uint8_t p[SECRET_LEN]);
      void setEncodeSequence(const Context*);
      void setDecodeSequence(const Context*);

encode, decode の実装

encode,decode が暗号処理の本体である。

MAC計算と暗号化を 2パスで行っている。 MAC計算後、またバッファの始めから処理する必要があるので、Buffer の mark/resume を利用している。