keygen 要素

4.10.12 keygen 要素

カテゴリー:
フロー・コンテント
フレージング・コンテント
インタラクティブ・コンテント
リスト対象で、ラベル付け可能で、サブミット可能で、リセット可能で、再関連付け可能フォーム関連要素
パルパブル・コンテント
この要素を使うことができるコンテキスト:
フレージング・コンテントが期待される場所
コンテントモデル:
コンテント属性:
グローバル属性
autofocus - ページがロードされた時に自動的にフォームコントロールにフォーカスを当てる
challenge - 生成され署名された公開鍵でパッケージ化する文字列
disabled - フォームコントロールを無効にするかどうか
form - form 要素にコントロールを関連付ける
keytype - 生成する暗号キーのタイプ
name - フォームのサブミットform.elements API で使うフォームコントロールの名前
text/html におけるタグの省略:
終了タグはありません。
指定可能な ARIA role 属性 の値:
なし
指定可能な ARIA ステートとプロパティ属性:
グローバル aria-* 属性
DOM インタフェース:
interface HTMLKeygenElement : HTMLElement {
           attribute boolean autofocus;
           attribute DOMString challenge;
           attribute boolean disabled;
  readonly attribute HTMLFormElement? form;
           attribute DOMString keytype;
           attribute DOMString name;

  readonly attribute DOMString type;

  readonly attribute boolean willValidate;
  readonly attribute ValidityState validity;
  readonly attribute DOMString validationMessage;
  boolean checkValidity();
  void setCustomValidity(DOMString error);

  readonly attribute NodeList labels;
};

keygen 要素は、鍵ペア生成コントロールを表します。コントロールのフォームがサブミットされるとき、その秘密鍵はローカルの鍵ストアに蓄積され、公開鍵はパッケージされてサーバーに送信されます。

challenge 属性を指定することができます。その値は、サブミットされる鍵でパッケージされます。

keytype 属性は列挙属性です。次表は、この属性のキーワードと状態を一覧にしたものです。左側のカラムにあるキーワードは、そのキーワードと同じ行の 2 番目のカラムのセルに挙げた状態に対応します。ユーザーエージェントは、これらの値をサポートする必要はありませんが、自身がサポートするアルゴリズムに対応する値のみは認識しなければいけません。

Keyword State
rsa RSA

妥当でない値が指定された時のデフォルトの状態は、unknown 状態です。値が指定されなかった時のデフォルトの状態は、RSA 状態をサポートしていれば、それになります。そうでなければ unknown 状態となります。

本仕様では、どのキータイプをユーザーエージェントがサポートすべきかまでは指定しません。ユーザーエージェントは、どのキーも一切サポートしなくても構いません。

ユーザーエージェントは、それぞれの keygen 要素ごとに対して、ユーザーインタフェースを表示して、ユーザーがこの要素の鍵ペア生成の設定を定義できるようにすることができます。例えば、鍵長などです。

keygen 要素のリセット・アルゴリズムは、これらの各種設定情報をデフォルトに戻すことです。

この要素のは、次のアルゴリズムから返される文字列となります:

  1. 次のリストから適切な手順を使います:

    keytype 属性が RSA 状態にある場合

    ユーザーが指定したセッティングを使って RSA キーペアを生成します。適切なら、md5WithRSAEncryption RSA 署名アルゴリズム(MD5 と RSA 暗号アルゴリズムを使った署名アルゴリズム)を使います。これは RFC 3279 のセクション 2.2.1 ("RSA Signature Algorithm") で参照されており、RFC 3447 で定義されています。 [RFC3279] [RFC3447]

    上記に当てはまらず、keytype 属性が unknown 状態にある場合

    指定されたキーのタイプはサポートされていません。空文字列を返して、このアルゴリズムを中止します。

    private key を、生成した秘密鍵とします。

    public key を、生成した公開鍵とします。

    signature algorithm を、選択された署名アルゴリズムとします。

  2. この要素が challenge 属性を持つなら、challenge を、その属性の値になるようにします。そうでなければ、challenge を、空文字列とします。

  3. algorithm を、algorithm フィールドと parameters フィールドと伴う ASN.1 AlgorithmIdentifier 構造とします。これは RFC 5280 で定義されているとおりです。algorithm フィールドは、ASN.1 OID を与えますが、signature algorithm を識別するために使い、OID は RFC 3279 のセクション 2.2 ("Signature Algorithms") で定義されています。parameters フィールドは、RFC 3279 の要件通りにセットアップされるもので、AlgorithmIdentifier のために必要となります。 [X690] [RFC5280] [RFC3279]

  4. spki を、algorithm フィールドと subjectPublicKey フィールドを伴う ASN.1 SubjectPublicKeyInfo 構造とします。これは RFC 5280 で定義されているとおりです。algorithm フィールドは、前の手順で algorithm 構造にセットされたものです。subjectPublicKey フィールドは、public key をエンコードして ASN.1 DER の結果として得られた BIT STRING 値にセットされたものです。 [X690] [RFC5280]

  5. publicKeyAndChallenge を、下記に定義されているとおり、spki フィールドと challenge フィールドを伴う ASN.1 PublicKeyAndChallenge 構造とします。spki フィールドは、前の手順の spki 構造にセットされたものです。challenge フィールドは、前に取得された文字列 challenge にセットされたものです。 [X690]

  6. signature を、BIT STRING 値とします。これは ASN.1 DER から得られた結果で、署名をエンコードしたものです。この署名は、ASN.1 DER で publicKeyAndChallenge 構造をエンコードして得られたバイトに、signature algorithm を適用して生成されたものです。その際には、署名鍵に private key を使います。 [X690]

  7. signedPublicKeyAndChallenge を、publicKeyAndChallenge フィールドと signatureAlgorithm フィールドと signature フィールドを伴う ASN.1 SignedPublicKeyAndChallenge 構造とします。これは下記に定義されているとおりです。publicKeyAndChallenge フィールドは publicKeyAndChallenge 構造にセットされたもので、signatureAlgorithm フィールドは algorithm 構造にセットされたもので、signature フィールドは前の手順の BIT STRING signature にセットされたものです。 [X690]

  8. ASN.1 DER で signedPublicKeyAndChallenge 構造をエンコードして得られた結果を base 64 エンコードした結果を返します。 [RFC4648] [X690]

前述のアルゴリズムで使われる data オブジェクトは次の通りに定義されます。これらの定義は、RFC 5280 で定義されているのと同じ "ASN.1-like" 構文を使います。 [RFC5280]

PublicKeyAndChallenge ::= SEQUENCE {
    spki SubjectPublicKeyInfo,
    challenge IA5STRING
}

SignedPublicKeyAndChallenge ::= SEQUENCE {
    publicKeyAndChallenge PublicKeyAndChallenge,
    signatureAlgorithm AlgorithmIdentifier,
    signature BIT STRING
}

制約バリデーション: keygen 要素は制約バリデーションから除外されます。

form 属性は、keygen 要素を明示的にフォームオーナーと関連づけるために使います。name 属性は、この要素の名前を表します。disabled 属性は、このコントロールを非インタラクティブにして、その値がサブミットされないようにするために使います。autofocus 属性はフォーカスをコントロールします。

keygen . type

文字列 "keygen" を返します。

challenge IDL 属性は、同じ名前のコンテント属性を反映しなければいけません。

keytype IDL 属性は、同じ名前のコンテント属性を反映しなければいけません。ただし、既知の値に限定されます。

type IDL 属性は、"keygen" という値を返さなければいけません。

willValidate, validity, validationMessage IDL 属性、そして、checkValidity()setCustomValidity() メソッドは、制約バリデーション API の一部です。labels 属性は、この要素の label のリストを提供します。autofocus, disabled, form, name IDL 属性は、この要素の forms API の一部です。

本仕様は、採用すべき秘密鍵の生成方法までは指定しません。SignedPublicKeyAndChallenge (SPKAC) 構造の受信後に、サーバーはクライアント証明書を生成し、ユーザーにダウンロードさせることが期待されます。この証明書は、ダウンロードされ、秘密鍵に対応するキーストアに保存されたら、TSL と証明書認証を使うサービスの認証に使うことができます。

鍵ペアを生成し、秘密鍵をユーザーのキーストアに追加し、その公開鍵をサーバーにサブミットするためには、次のようなマークアップを使うことができます:

<form action="processkey.cgi" method="post" enctype="multipart/form-data">
 <p><keygen name="key"></p>
 <p><input type=submit value="鍵を送信..."></p>
</form>

サーバーは、"key" の値としてパッケージされた RSA 公開鍵とともにフォームサブミッションを受信します。これは、前述の通り、クライアント証明書の生成など、さまざまな目的に使うことができます。


※ 原文:http://www.w3.org/TR/2014/REC-html5-20141028/forms.html#the-keygen-element