SSブログ

Firebird4.0 の ChaCha20 [Firebird]

これは、Firebird Advent Calendar 2021 https://qiita.com/advent-calendar/2021/firebird
の2日目の記事です

Firebird3.0 で、サーバーとクライアントのやりとりを RC4 で暗号化する仕組みができました。
Firebird4.0 で RC4 に加えて、ChaCha20 による暗号化が可能になりました。

ドライバーが対応していれば、ネゴシエーションでChaCha20 で通信することが決められますが、
対応していないドライバーであれば、 RC4 (もしくは、暗号化なし)でデータのやりとりがなされます。

今年は、自分が書いてメンテナンスしているドライバーで、この ChaCha20 のサポートをしました。

ChaCha20 が、 TLS1.3 で使われるようになった比較的新しい暗号アルゴリズムだということは知っていて、
なんとなく難しそう・・・と思っていたのですが
ブロック暗号ではなく(ブロック暗号だとブロックのあまり部分の扱いとか難しそう)ストリーム暗号ならなんとかなるかなってことで調べ始めました。

https://en.wikipedia.org/wiki/Salsa20#ChaCha_variant
https://ja.wikipedia.org/wiki/Salsa20

64バイトの内部状態(16バイトの固定値、32バイトの秘密鍵、12バイトの nonce、4バイトのカウンター)をグルグルかき混ぜて、
その内部状態と xor をとって暗号化/復号するもので、わかってみると、自分でも実装できるようなものでした。

pure python の python ドライバー pyfirebirdsql では、 ChaCha20 部分を自分で書きました
https://github.com/nakagami/pyfirebirdsql/blob/master/firebirdsql/chacha20.py

Go言語、 erlang のドライバーは、標準ライブラリに ChaCha20 のエンコード、デコードをする機能があったのでそれを使いました

- https://github.com/nakagami/firebirdsql
- https://github.com/nakagami/efirebirdsql

専門家でないので、 ChaCha20 でどれくらい暗号強度が増したのかわからないのですが、
(十分な長さのパスワードであれば、インターネット上を通信パケットを流しても十分安全なのか?)
Firebird の新しいWireProtocol に追随できて嬉しいです。

コメント(0) 
共通テーマ:日記・雑感