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