sounisi5011/sounisi5011.jp

暗号化済みファイルの生成処理の修正

Opened this issue · 3 comments

plugins/metalsmith/url-shortener/encrypt.jsに含まれるいくつかの問題を修正する。

よって、Date.now()の返り値を使用する。ECMAScript Date objectsがサポートする最大のUnixtimeは8,640,000,000,000,000ミリ秒で、これは7 bytesに収まるため、Unixtimeに追加の乱数5 bytes(もしくは6 bytes。Unixtimeの最大値も6 bytesになるが、6 bytesを超えるのは西暦10889年8月2日であるため、問題は無い)を追加した値を初期ベクトル(IV)に使用する。

データ通信処理への転載を想定するなら、ミリ秒単位の日付情報なんて当てにならない。実装次第では1秒ごとに変化するなんてこともある。1秒の間に、6 bytesの乱数が誕生日パラドックスで衝突してしまうリスクは十分考慮すべきでは?

まっとうな実装は、IVとしてカウンターを使います。
本当は怖いAES-GCMの話 - ぼちぼち日記

暗号化処理のオプションで以前までのカウント値を指定できるようにしたほうがいいぞ…
必須オプションにすれば、省略もできなくなるし、勉強になる

cipherivでnpm内を検索したら、以下の興味深いパッケージを発見した:

ところで随分前に@sounisi5011/encrypted-archiveを作ってしまってだな