Noh | エンジニア向け情報共有コミュニティ
Signup / Login

[ panva / jose ] generateSecret の extractable オプションについて

投稿日: 2025/02/22

https://github.com/panva/jose

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 取得不可一時的な鍵(外部に漏らさない用途)
yosi

Noh を作ってるエンジニア。

目次