Buffer.from(key, 'base64') は不正文字を無視し鍵長がサイレントに崩れる
Node.js
セキュリティ
ハマりどころ
Node の Buffer.from(str, 'base64') は base64 アルファベット外の文字を黙って無視する。そのため base64 でない文字列を鍵としてデコードすると、想定の 32 byte に届かずサイレントに短くなり、createCipheriv が Invalid key length でクラッシュしたり、環境ごとに鍵長がぶれて dev で動いて prod で起動失敗する。鍵フォーマットに依存したくない場合は createHash('sha256').update(key).digest() で 32 byte に正規化するが、これは入力鍵が既に高エントロピーであることが前提。base64 の鍵長検証(decoded.length !== 32 で throw)を入れておくと起動時に検知できる。