非推奨
この機能は Web 標準から削除されました。まだサポートしているプラウザーがあるかもしれませんが、ゆくゆくはなくなるものです。新旧にかかわらず、プロジェクトでの使用をやめてください。この機能を使用するページ、Web アプリはいつ動かなくなってもおかしくありません。

HTML <keygen> 要素は、鍵の材料の生成を容易にするため、および HTML フォームの一部として公開鍵を送信するための要素です。この仕組みは、ウェブベースの証明書管理システムと合わせて使用するものとして設計されています。証明書の要求に必要な他の情報を伴う HTML フォームで <keygen> 要素を使用して、その処理結果が署名済み証明書になることを想定しています。

現在ウェブブラウザー製造元の間で、この機能を維持するか否かの議論が行われています。決定するまでは、この機能は非推奨であり廃止されると考えるほうがよいでしょう。

コンテンツカテゴリー フローコンテンツフレージングコンテンツ、インタラクティブコンテンツ、リスト化ラベル付け可能サブミット可能リセット可能フォーム関連要素、パルパブルコンテンツ
許可された内容 なし。これは 空要素 です。
タグの省略 開始タグは必須。終了タグを記述してはならない。
許可された親要素 フレージングコンテンツ を受け入れるすべての要素
許可された ARIA ロール なし
DOM インターフェイス HTMLKeygenElement

属性

この要素はグローバル属性を持ちます。

autofocus
この論理属性で、ユーザーが別のコントロールに入力するなどして変更しない限り、ページ読み込み時にこのコントロールがフォーカスを持つべきであることを指定できます。ドキュメント内のフォーム要素でひとつだけが autofocus 属性を持つことができ、これは真偽値です。
challenge
公開鍵とともに送信するチャレンジ文字列です。指定しない場合のデフォルト値は空文字列です。
disabled
この論理属性は、フォームコントロールと対話できないことを示します。
form
この要素が関連づけられた form 要素 (フォームオーナー)。属性の値は同一文書内の <form> 要素の id 属性の値でなければなりません。この属性を指定しない場合、この要素は <form> 要素の子孫要素として配置しなければなりません。この属性は <keygen> 要素を form 要素の子孫としてだけでなく、文書内のどこにでも配置することを可能にします。
keytype
生成する鍵の種類。デフォルト値は RSA です。
name
コントロールの名前であり、フォームデータとともに送信されます。

この要素は以下のように記述します:

<keygen name="name" challenge="challenge string" keytype="type" keyparams="pqg-params">

keytype パラメーターは、生成する鍵の種類を指定します。有効な値は "RSA" (既定値)、"DSA"、"EC" です。name 属性と challenge 属性はすべての場合で必要です。keytype 属性は RSA 鍵の生成では省略可、DSA 鍵および EC 鍵の生成では必須です。keyparams 属性は DSA 鍵および EC 鍵の生成では必須、RSA 鍵の生成では無視されます。PQG は、keyparams の同意語です。つまり、keyparams="pqg-params" または pqg="pqg-params" と指定できます。

RSA 鍵では、keyparams パラメーターを使用しません (指定しても無視されます)。ユーザーは RSA 鍵の強度を選択できます。現在、ユーザーは "高" 強度 (2048 ビット) または "中" 強度 (1024 ビット) を選択できます。

DSA 鍵では keyparams パラメーターで、鍵の生成処理で使用する DSA PQG パラメーターを指定します。pqg パラメーターの値は、IETF RFC 3279 で定めている DSS パラメーターを DER で符号化したものを、BASE64 で符号化したものです。ユーザーは DSA 鍵のサイズを、DSA 標準で定義されているサイズから1つ選択できます。

EC 鍵では keyparams パラメーターで、鍵が生成される楕円曲線の名前を指定します。これは通常、nsKeygenHandler.cpp 内のテーブル由来の文字列です。(ここに名前がある曲線の一部だけが、実際に個々のブラウザーでサポートされている可能性がある点に注意してください) keyparams パラメーター文字列が認識できない曲線名である場合は、ユーザーが選択した鍵強度 (低、中、高) に基づいて曲線が選択されます。高強度は "secp384r1"、中強度は "secp256r1" です。(注記: 鍵強度の種類数の選択、各強度のデフォルト値、ユーザーに選択肢を提示する UI は仕様の範囲外です)

<keygen> 要素は、HTML フォーム内のみで有効です。この要素は、ユーザーが鍵のサイズを選択するために提示するいくつかの選択肢をもたらします。選択の UI はメニュー、ラジオボタン、あるいは他に利用可能な何かになるでしょう。ブラウザーは、使用可能な鍵強度をいくつか提示します。現在は、強と中の 2 種類の強度を提供しています。ユーザーのブラウザーが暗号処理ハードウェア (例えば "スマートカード") をサポートするように設定されている場合は、どこへ鍵を生成するか (例えばスマートカードに、あるいはソフトウェアで生成してディスクへ保存) の選択肢も与えられるかもしれません。

送信ボタンが押下されると、選択したサイズの鍵ペアを生成します。秘密鍵は暗号化されて、ローカルの鍵データベースに保管されます。

   PublicKeyAndChallenge ::= SEQUENCE {
       spki SubjectPublicKeyInfo,
       challenge IA5STRING
   }
   SignedPublicKeyAndChallenge ::= SEQUENCE {
       publicKeyAndChallenge PublicKeyAndChallenge,
       signatureAlgorithm AlgorithmIdentifier,
       signature BIT STRING
   }

公開鍵とチャレンジ文字列は DER で PublicKeyAndChallenge として符号化され、SignedPublicKeyAndChallenge を生成するために秘密鍵でデジタル署名が施されます。SignedPublicKeyAndChallengeBase64 で符号化され、最終的に ASCII データがフォームの name/value のペアとしてサーバーに送信されます。name は、keygen 要素の name 属性で指定した名前です。チャレンジ文字列が提供されない場合は、長さが 0 の IA5STRING として符号化されます。

以下は、HTTP サーバーから CGI プログラムに提供されるフォーム送信内容の例です:

   commonname=John+Doe&email=doe@foo.com&org=Foobar+Computing+Corp.&
   orgunit=Bureau+of+Bureaucracy&locality=Anytown&state=California&country=US&
   key=MIHFMHEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAnX0TILJrOMUue%2BPtwBRE6XfV%0AWtKQbsshxk5ZhcUwcwyvcnIq9b82QhJdoACdD34rqfCAIND46fXKQUnb0mvKzQID%0AAQABFhFNb3ppbGxhSXNNeUZyaWVuZDANBgkqhkiG9w0BAQQFAANBAAKv2Eex2n%2FS%0Ar%2F7iJNroWlSzSMtTiQTEB%2BADWHGj9u1xrUrOilq%2Fo2cuQxIfZcNZkYAkWP4DubqW%0Ai0%2F%2FrgBvmco%3D

仕様

仕様書 策定状況 コメント
HTML Living Standard
<keygen> の定義
現行の標準  
HTML5
<keygen> の定義
勧告  

ブラウザー実装状況

機能 Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 1.0 [1] (有) 1.0 (1.7 or earlier) 未サポート 3.0 1.2
機能 Android Android Webview Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Android 版 Chrome
基本サポート 2.3 (有) [1] (有) 1.0 (1.0) 未サポート ? 未サポート (有) [1]

[1] Web Crypto API を採用したため Chrome 49 で非推奨化、Chrome 57 で削除しました。詳細情報: https://www.chromestatus.com/feature/5716060992962560 https://bugs.chromium.org/p/chromium/issues/detail?id=568184

ドキュメントのタグと貢献者

 このページの貢献者: yyss
 最終更新者: yyss,