2021年3月に欧州電気通信標準化機構(ETSI)から、これまでのPAdES、CAdESなどの先進署名フォーマットに加えてJSON形式のJAdESフォーマットの技術標準「ETSI TS 119 182-1」が発行されました。
JAdESは、英国を中心に欧州で進められているオープンバンキングの仕様からも構成するコンポーネントの一つとして参照されており、ウェブサイト間の取引で使いやすいJSON形式、JSON Web Signatures(JWS)を採用していることから、今後注目される新しい先進署名フォーマットです。
本記事は連載として、長期署名フォーマット(AdES、先進署名フォーマット)やそのプロファイル、通常の電子署名との違いは何か、JSON Web Signatures(JWS)とは何か、JAdESとは何かについて複数回に分けて解説していきます。発行された標準に基づく技術解説書はまだ公開されておらず、恐らく現時点では世界初のJAdESの技術解説になるかと思います。
第1回目となる今回は、JAdESを知るための前提知識となる長期署名フォーマット(AdES、先進署名フォーマット)とは一体何か、今までの署名フォーマットとはどう違うのか、概要と特徴を解説します。
先進署名フォーマット「JAdES」とは
近年の電子契約の流行や、欧州のID制度(eIDAS)を活用した金融・税制・医療などのアプリケーションにより、デジタル署名や電子署名が注目されていますが、「誰がデジタル署名したのか」を確認できる署名データの形式として先進署名(AdES: Advanced Electronic Signature、高度電子署名とも呼ばれます)フォーマットが使われています。
先進署名フォーマットには、署名メールやデジタルタイムススタンプで使われるASN.1バイナリ形式のもの、医療や建築分野で使われるXML形式のもの、電子契約等で広く使われているPDF形式の署名のものが既に国際標準化されていますが、そこへウェブサイト間の取引の領域で利用しやすいJSON形式を元にした、先進署名JAdESが新たに追加されました。
欧州では、PSD2司令に基づくオープンバンキング※1が進められており、その活動を主導しているオープンバンキングヨーロッパで定めたJSON Web Signatureのプロファイルに関する標準では、JAdESが参照されています。
※1) オープンバンキング: API を使用して金融機関のデータを外部と共有する銀行のビジネスモデル。
JSON(JavaScript Object Notation)は、RFC8259により標準化されたテキストで簡単なオブジェクトを表すための表記方法で、JavaScriptや他のプログラミング言語でもテキストベースのデータ交換を行う際に使われています。
JSONではオブジェクトは名前と値の組として以下のように表現できます。
{ "名前1": "値1", "名前2": "値2", ... }
(例) { "氏名": "鈴木花子", "年齢": 35, ”所属": "総務部" }
また、配列は以下のように表現できます。
[ 要素1, 要素2, ... ]
(例) [ 1, 2, "a", {"b": 23} ]
このJSONを元に署名フォーマットを定義したのが、RFC 7515 JSON Web Signature (JWS) で、JWSはOAuthやOpenID ConnectのアクセストークンであるJSON Web Token (JWT)でも使用されています。
それでは、JAdESのデータ構造の例を見てみましょう。以下のようなテキスト文字列になっています。
”//”以降はコメント文です。
{ "payload": “YWFh”, // ←署名対象のデータ。この例では”aaa” "signatures": [ // ←複数の人の署名情報 { // ←Aさんの署名の情報 "protected": “eyJhbGc...”, // ←Aさんの署名で保護された情報、 // JAdESでは署名の補足情報を // 追加できるようJWSを拡張 "header": { // ←Aさんの署名で保護されない情報 “etsiU”: “eyJzaWd...” // ←JAdESの非署名オブジェクトであり、 // JAdESでは署名の長期検証を // 行えるようJWSを拡張 }, "signature": “PQpFz...” // ←Aさんの署名値 }, ... // ←別の人の署名があれば ] }
ここで、”payload”、”protected”、”etsiU”、”signature”の値は全てBase64URLエンコーディングされています。この値の中身がどのようになっているかは次回以降、解説します。
みなさんが知っているJWSと少し違うと感じた方もいるのではないでしょうか。一般的に知られているJWSの署名フォーマットは、
eyJh・・・.eyJzd・・・.TJV3・・・
のような"ey"で始まりピリオド"."で接続された文字列になっていますが、JAdESではJSONオブジェクト形式のJWS署名データになっています。この詳細も次回以降で解説します。
JAdESで追加できる属性情報の種類は、既に標準化されているCAdESやXAdESとほぼ同じで、以下に示すようなJWSで既に定義されている属性情報の定義をうまく活用して、追加の属性を表現できるよう工夫されています。追加可能な属性の詳細や、CAdESの属性との対応等については次回以降で説明します。
JWS署名で保護された情報
- 署名者の証明書の参照情報
- 署名アルゴリズム
- 署名場所
- 署名の意思表明
- どのような条件の下で署名や検証するかを示す署名ポリシーの識別情報
など
JWS署名で保護されない情報(アーカイブタイムスタンプ等で保護)
- 第三者が証明する署名時刻(署名タイムスタンプ)
- 長期で検証に必要となる証明書や失効情報のデータ
- 長期で検証に必要となる証明書や失効情報のデータの参照情報
- 検証可能期間を延長するためのアーカイブタイムスタンプ
- カウンタ署名
など
様々な署名フォーマットと比較した「JAdES」の特徴
JSONやJWSをベースとするJAdESには、どのような特徴があるのかを整理してみましょう。
先進署名フォーマットCAdES、XAdESと比較して、JSONやJWSをベースにしていることにより以下の特徴があります。
- JSONデータを元にしておりデータの読み込みが簡単で、ASN.1やXMLといった特別なパーザー※2を必要としない。
- ウェブサイト間の取引での利用に適している。
- XMLよりは署名データのサイズが小さいが、CAdESよりは大きい。
※2) パーザー:コンピュータプログラムのソースコードなど、何らかの言語で記述された構造的な文字データを解析し、プログラムで扱えるように構文解析を行うためのプログラムの総称。
署名フォーマットJWSと比較した際に、JAdESとしてCAdESやXAdESと同様に以下の特徴があります。
- 署名データと、署名者のデジタル証明書とを強固に紐付けている。
- 署名者や署名データに関する属性情報の表記が可能。
- 暗号アルゴリズムの移行、ルート認証局の移行などに対応して長期に渡る検証、検証期間の延長が可能。
- (署名者証明書との紐付けが必要なため)HMACによる署名は利用できない。
先進署名フォーマットCAdESやXAdESと比較した場合に、JAdESには以下の特徴があります。
- CAdESと比較して、XAdESと同様に外部署名(detached署名)の署名対象との参照関係を記述できる。
- 外部署名のための特別な属性(“sigD”オブジェクト)を持つ。
- CAdES、XAdESと異なりHTTPプロトコルにおいて、HTTPヘッダー、ボディをJAdES署名で保護するための方法を規定している。
次回は、先進署名フォーマット(AdES)は、通常の署名フォーマットとどのように違うのか、また、ETSI TS 119 182-1 の JAdESの技術標準では、「baseline signatures」という名前のプロファイルも規定されていますが、プロファイルとは何かについて解説します。