[ panva / jose ] generateSecret の extractable オプションについて
投稿日: 2025/02/22
GPT君の説明がわかりやすかった。
generateSecret の extractable オプションは、生成した秘密鍵をエクスポートできるかどうかを制御するフラグです。
extractable の意味
extractable を true にすると、秘密鍵を JWK 形式などでエクスポート できるようになります。
false にすると、エクスポートが禁止され、外部に取り出せなくなります。
const secret = await jose.generateSecret("HS256", { extractable: false });
- extractable: true(デフォルト) → exportJWK でエクスポート可能
- extractable: false → exportJWK でエラーが発生する(秘密鍵を外部に漏らさない)
extractable: false の影響
JWK エクスポートの可否
import * as jose from "jose"; (async () => { const secret = await jose.generateSecret("HS256", { extractable: false }); try { const jwk = await jose.exportJWK(secret); console.log("JWK:", jwk); } catch (error) { console.error("エクスポート失敗:", error.message); } })();
✅ extractable: true
JWK: { kty: 'oct', k: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' }
✖ extractable: false(デフォルト)
エクスポート失敗: The provided key is not extractable
このように、エクスポートが禁止されます。
秘密鍵の再利用
extractable: false
にすると、一度生成した鍵を exportJWK で外部に保存できないため、環境変数やデータベースに保存できず、再利用が難しくなります。
したがって、短期間だけ使う鍵(例: メモリ上での一時的な暗号化処理)に向いています。
いつ extractable: false を使うべきか?
- extractable: trueを使うケース
- 秘密鍵を環境変数や DB に保存して再利用したい場合
- JWK 形式でエクスポートして別のシステムで使用したい場合
- extractable: false(デフォルト) を使うケース
- メモリ上で一時的に鍵を作成し、外部に漏れないようにしたい場合
- セキュリティを強化し、鍵を絶対にエクスポートさせたくない場合
まとめ
extractable | 説明 | エクスポート可否 | 用途 |
---|---|---|---|
true | 秘密鍵をエクスポート可能 | ✅ JWK でエクスポート可 | 環境変数や DB に保存し再利用 |
false(デフォルト) | エクスポート禁止 | ❌ JWK 取得不可 | 一時的な鍵(外部に漏らさない用途) |