この記事は,論文のうち,必要な部分を抜粋し和訳したものです。

The Winternitz One-Time Signature Scheme

このセクションではW-OTS\(^+\)について書きます。W-OTSのコアとなるアイデアは,ランダムな入力から始まる特定の数の関数の連鎖を使用することです。これらのランダムな入力は秘密鍵です。公開鍵は連鎖の最終の出力,つまり,連鎖の最後から構成されます。署名は,メッセージを各関数チェーンの一つの中間地にマッピングすることにより計算されます。以前のW-OTSのすべての変種は,単に使用される関数を反復した関数の連鎖([BDE+11]の場合は関数族)によって構築されています。それとは対照的に,W-OTS\(^+\)では,使用されているハッシュ関数族に衝突耐性を要求することなく厳密なセキュリティ証明を可能にする,特別な反復モードを使用しています。いくつかの準備から始めます。そのあとW-OTS\(^+\)について話します。

Signature Scheme

ここで,いくつかの表記法を固め,適応型選択メッセージ攻撃のもとでデジタル署名方式と存在的偽造不可能性を定義します(EU-CMA)。 この論文では,\(x\)が一様分布を用いて集合\(\mathcal{X}\)からランダムに選択されるとき,\(x \overset{\$}{\gets} \mathcal{X}\)と書く。さらに log は \(\text{log}_2\)とします。

Digital Signature schmes.\(\,\,\,\,\,\) \(\mathcal{M}\)をメッセージ空間とします。デジタル署名方式Dss=(Kg, Sign, Vf)は,確率的多項式アルゴリズムの3つです。

  • Kg(1\(^n\)) セキュリティパラメータ\(1^n\)が入力されると,秘密署名鍵skと公開検証鍵pkを出力する。

  • Sign(sk, \(M\)) \(M \in \mathcal{M}\)ならば,\(M\)に対してskの下で署名\(\sigma\)を出力する。

  • Vf(pk, \(\sigma\), \(M\)) \(\sigma\)pkの下で\(M\)の有効な署名ならば1を出力する。

次のようになります。 \(\forall\) (pk, sk) \(\gets\) Kg(1\(^n\)) \(\,\,\),\(\,\,\) \(\forall\) (\(M\in \mathcal{M}\)) \(\,\,\):\(\,\,\) Vf(pkSign(sk,\(M\)),\(M\))=1。

EU-CMA Security.\(\,\,\,\,\,\) デジタル署名方式の標準的なセキュリティの考え方は,適応型選択メッセージ攻撃(EU-CMA)の下での存在的偽造不可能性(EU-CMA)であり,以下の思考実験を使用して定義されます。DSS(1\(^n\))とは,セキュリティパラメータ\(n\)を持つ署名方式を意味します。

Experiment.\(\,\,\,\,\,\) \(\text{Exp}^{\text{EU-CMA}}_{\text{Dss}(1^n)}(\mathcal{A})\)
   (sk,pk) \(\,\,\gets\,\,\) Kg(1\(^n\))
   (\(M\), \(\sigma\)) \(\,\,\gets\,\,\) \(\mathcal{A}^{\text{Sign(sk,}\cdot)} (\textbf{pk})\)
   \(\{(M_i,\sigma_i) \}^q_1\)を(,\(\cdot\))の問い合わせ/回答ペアとする
   (,\(M*\),\(\sigma\)*)=1かつ\(M^{*} \notin \{M_i\}^q_1\)ならば1を返す

上記の思考実験における攻撃者\(\mathcal{A}\)の成功確率については,次のように書きます。 \[ \text{Succ}^{\text{EU-CMA}}_{\text{Dss}(1^n)}(\mathcal{A}) = \text{Pr} \left[\textbf{Exp}^{\text{EU-CMA}}_{\text{Dss}(1^n)}(\mathcal{A})=1 \right] \] これを使用して,次のようにEU-CMAを定義します。

Definition 1 (EU-CMA).\(\,\,\,\,\,\) \(n,t,p \in \mathbb{N}\)\(q=\text{poly}(n)\),Dssをデジタル署名方式とする。 DssがEU-CMA安全とは,上記思考実験でSign\(q\)個の問い合わせをして,時間\(t\)以内に, 考えられるすべての攻撃者\(\mathcal{A}\)のうち,最大の成功確率\(\textbf{InSec}^{\text{EU-CMA}}(\text{Dss}(1^n);t,q)\)\(n\)において無視できるとすると, \[ \text{InSec}^{\text{EU-CMA}}(\text{DSS}(1^n);t,q) \overset{def}{=} \underset{\mathcal{A}}{\text{max}} \{ \text{Succ}^{\text{EU-CMA}}_{\text{Dss}(1^n)}(\mathcal{A}) \} = negl(n) \] EU-CMA安全なワンタイム署名方式(OTS)は, 攻撃者のオラクルへの問い合わせの数が1に制限されている限り,すなわち\(q=1\)である限りEU-CMA安全なDssです。

W-OTS+

さてW-OTS\(^+\)について紹介します。以前のすべてのW-OTSの変種と同じように, W-OTS\(^+\)はセキュリティパラメータ\(n\in\mathbb{N}\),メッセージ長\(m\),そして時間とメモリのトレードオフを決定するWinternitzパラメータ\(w \in \mathbb{N}, w > 1\)によってパラメタライズされます。最後の2個のパラメータは次のものを計算するのに使用されます。 \[ l_1 = \left\lceil \frac{m}{\text{log}(w)} \right\rceil, \,\,\, l_2 = \left\lfloor \frac{\text{log}(l_1(w-1))}{\text{log}(w)} \right\rfloor + 1, \,\,\, l = l_1 + l_2 \] さらに,W-OTS\(^+\)は鍵空間\(\mathcal{K}_n\)で関数の族\(\mathcal{F}_n\,\,\{f_k:\{0,1\}^n \to \{0,1\}^n| k\in \mathbb{K}_n \}\)を使用します。読者は,圧縮無しの暗号学的なハッシュ関数だと考えてもらって大丈夫です。 \(\mathcal{F}_n\)を使って,次の連鎖関数を定義します。

\(c^i_k(x,\textbf{r})\):入力値\(x\in \{0,1\}^n\),イテレーションカウンタ\(i\in \mathbb{N}\),鍵\(k\in \mathcal{K}\),ランダム化要素\(\textbf{r}=(r_1,...,r_j)\in \{0,1 \}^{n\times j}(j\geq i)\)とすると, 連鎖関数は次のように働きます。\(i=0\)のとき,\(c\)\(x\)を返します(\(c^0_k(x,\textbf{r})=x\))。\(i>0\)のとき,再帰的に定義します。 \[ c^i_k(x,\textbf{r}) = f_k(c^{i-1}_k(x,\textbf{r})\oplus r_i) \] つまり,各ラウンドで,関数は最初に中間値とビットマスク\(r\)のビットごとのXORをとり, その結果に対して\(f_k\)を評価します。の部分集合\(r_a,...,r_b\)として,\(\textbf{r}_a,b\)を書きます。\(b<a\)の場合\(\textbf{r}_{a,b}\)をからの文字列と定義します。パラメータ\(m\)\(w\),そして関数の族\(\mathcal{F}_n\)は既知であると仮定します。さて,W-OTS\(^+\)の三つのアルゴリズムについて記載します:

- \(\textit{鍵生成アルゴリズム}\,\,\,\,\,\) (Kg(\(1^n\))):
単項のセキュリティパラメータ\(n\)を入力として,鍵生成アルゴリズムは\(l+w-1\)個の\(n\)ビットの文字列をランダムに一様に選択します。秘密鍵\(\textbf{sk}=(\text{sk}_1,...,\text{sk}_l)\)は,最初の\(l\)個のランダムなビット列から構成されています。残りの\(w-1\)個のビット列は,\(c\)のためのランダム化要素\(\textbf{r}=(r_1,...,r_{w-1})\)として使用されます。次に,\(\text{Kg}\)はランダムに一様にファンクションキー\(k \overset{\$}{\gets} \mathcal{K}\)を選択します。公開検証鍵\(\textbf{pk}\)は次のように計算されます。 \[ \text{pk} = (\text{pk}_0,\text{pk}_1,...,\text{pk}_l) = ( (\textbf{r},k), c^{w-1}_k (\text{sk}_1,\textbf{r}) , \cdots,c^{w-1}_k (\text{sk}_l,\textbf{r}) ). \]

- \(\textit{署名アルゴリズム}\,\,\,\,\,\) (Sign(\(M\),sk,)):
\(m\)ビットのメッセージ\(M\),秘密署名鍵\(\textbf{sk}\)およびランダム化要素\(\textbf{r}\)を入力として,署名アルゴリズムはまず,\(M\)\(w\)基底表現を計算します:\(M=(M_1...M_{l_1}) \,\,,\,\, M_i \in \{0,...,w-1 \}\)。したがって,\(M\)は自然数\(x\)のバイナリ表現として扱われ,次に\(x\)\(w\)変数表現が計算されます。
次にチェックサムを以下のように計算します。 \[ C = \sum^{l_1}_{i=1}(w-1-M_i) \] そして,その\(w\)基底表現\(C=(C_1,...,C_{l_2})\)を計算します。\(C \leq l_1(w-1)\)より,\(C\)\(w\)基底表現は,たかだか\(l_2\)です。 \(M\)\(C\)\(w\)基底表現の連結である\(B=(b_1,...,b_l)=M\,\,||\,\,C\)を設定します。 署名は次のように計算されます。 \[ \sigma = (\sigma_1,...,\sigma_l) = (c^{b_1}_k(\text{sk}_1,\textbf{r}),...,c^{b_l}_k(\text{sk}_l,\textbf{r})). \] チェックサムは,ある一つのメッセージに対応した\(b_i,0 < i \leq l\)が与えられたとき, 任意の他のメッセージに対応する\(b'_{i} < b_i\)が少なくとも一つあることを保証することに留意してください。

- \(\textit{検証アルゴリズム}\,\,\,\,\,\) (Vf(\(1^n\),\(M\),\(\sigma\),)):
バイナリ長\(m\)のメッセージ\(M\),署名\(\sigma\),そして公開検証鍵\(\textbf{pk}\)を入力として, 検証アルゴリズムは,上述したようにまず\(b_i,1\leq i \leq l\)を計算します。 それから以下のように比較されます。 \[\begin{align} \textbf{pk} & = (\textbf{pk}_0,\textbf{pk}_1,...,\textbf{pk}_l) \nonumber \\ & \overset{?}{=} ( (\textbf{r},k), c^{w-1-b_1}_k(\sigma_1, \textbf{r}_{b_1 + 1,w-1}),...,c^{w-1-b_l}_k(\sigma_l, \textbf{r}_{b_l + 1,w-1}) ) \nonumber \end{align}\]

比較が成立する場合はtrueを返し,そうでない場合はfalseを返します。
3つのアルゴリズムすべての実行時間は,\(f_k\)\(lw\)個の評価によって決まります。 署名と秘密鍵のサイズは,\(|\sigma|=|\textbf{sk}|=ln\)ビットです。 公開鍵のサイズは\((l+w-1)n+|k|\)ビットで,ここで\(|k|\)\(\mathcal{K}\)の任意の要素を表すために必要なビット数です。

参考文献

  • W-OTS+ — Shorter Signatures for Hash-Based Signature Schemes
  • [BDE$^+$11]:
    Johannes Buchmann, Erik Dahmen, Sarah Ereth, Andreas Hulsing, and Markus Ruckert. On the security of the Winternitz one-time signature scheme. In A. Nitaj and D. Pointcheval, editors, Africacrypt 2011, volume 6737 of Lecture Notes in Computer Science, pages 363-378. Springer Berlin / Heidelberg, 2011.

コメント・シェア

前回までの記事(1)~(3)を踏まえて,実際にの署名方式を見ていきます。

PQCrypto耐量子として推奨される署名方式についてリリースしています。 二つの耐量子アルゴリズムは,XMSSSPHINCSです。 以下,引用です。

  1. Public-key signatures

    Similar to encryption, currently used signatures are based on problems that become easy to solve with a quantum computer. Signatures use cryptographic hash functions in order to hash the message and then sign the hash. Hash-based signatures use nothing but such a hash function and thus assume the minimum requirement necessary to build signatures. PQCRYPTO recommends the following two hash-based systems to achieve \(2^{128}\) post-quantum security:

  • XMSS [7] with any of the parameters specified in [11]. XMSS requires maintaining a state.

  • SPHINCS-256 [5]. SPHINCS is stateless.

Example of another choice under evaluation: the HFEv- [15] multivariate-quadratic signature system.

XMSSはステートフル署名方式,SPHINCSはステートレス署名方式です。

XMSS

XMSS(eXtended Merkle Signature Scheme)は2011年に発表され,インターネット上のドラフトは2015年にできました。

いくつかの点を除いて,Merkle木のような構成になっています。XMSS木には,親ノードがハッシングされる前に子ノードへXORされるマスクがあります。全てのノードでマスクは異なります。

二つ目の特徴は,XMSS木の葉がOTS署名公開鍵のハッシュではなく,L木と呼ばれる別の木のルートであることです。

L木の葉の中には,WOTS+公開鍵の要素が格納されています。 WOTS+公開鍵をなぜ木に格納するのかはHuelsingが論文内で書いてあるので引用します。

The tree is not used to store a WOTS public key but to hash it in a way that we can prove that a second-preimage resistant hash function suffices (instead of a collision resistant one).
意訳:この木はWOTS公開鍵を格納するために使用されるのではなく,(衝突耐性の代わりに)第二原像攻撃耐性のあるハッシュ関数が十分であることを証明できるようにハッシングするために使われます。

SPHINCS

SPHINCSはステートフル署名です。PHINCSは多くの木で構成されています。

  • 各ノードは一つ前のノードとレベルビットマスクを連結しXORしたハッシュです。

  • 公開鍵はビットマスクされたルートハッシュです。

  • 木の葉は,WOTS+ L木の圧縮された公開鍵です。

ビットマスク部分は,SPHINCSのハッシュ木(レベルごとに一意のマスク)のように見える点を除いて,前述のXMSS L-treeと同じです。

1つのWOTSを含む葉は,もう一つの木に署名することが可能です。 4つのSPHINCS木の2番目のレイヤーは,WOTS+公開鍵を自分の葉に含んでいます。 最初に設定したパラメータの通りに進んでいき,最後のレイヤー0に到達すると,WOTS+署名はほかのSPHINCS木ではなくて,HORS木に署名します。

HORST木やHORS木はL木と同様ですが,今回はWOTSの代わりにHORS FTSが含まれています。もし同じHORS鍵を使ってメッセージに署名しても問題ないので,それらを使ってメッセージに署名し,これが署名方式のセキュリティを向上させます。

以下は,WOTS+ L木のイメージ図(次のSPHINCS木への署名としてそれらを描くもの)で,メッセージへのパスを一つだけ示したものです。SPHINCSの論文から引用します。

メッセージMに署名するときには,最初にMと"ランダムな"インデックスで"ランダム化された"ハッシュを作成します(PHINCSのすべてが確定的にPRFで計算されるので,ランダムを強調して書いています)。インデックスは,Mのランダム化されたハッシュに署名するために,HORSTが何を選択するかを示しています。これがステートフルではなくなる方法です:メッセージに従って決定論的にインデックスを選ぶことによります。同じメッセージに再度署名する場合は,同じHORSTを使用する必要があります。異なる2つのメッセージに署名するには,2つの異なるHORSTを使用する必要があります。

コメント・シェア

前回までにOTSとFTSを見てきました。 次は,ハッシュ関数に基づいた実用的な署名体系はどのようにして構築されるかを見ていきたいと思います。 多くの回数使うことが出来て,理想的には何回も使うことができる署名方式です。

Dumb木

最初に考えられるのはOTSを束にして使うことです(OTSは自分が使いたいもの)。 初めて署名する場合は,最初のOTS鍵ペアを使用し,二度とと使ってはいけません。二回目に何かに署名したい場合は,二番目のOTS鍵ペアを使用し,それもまた二度と使ってはいけません。これを繰り返すと最終的にどうなるかはよくわかると思います。公開鍵はすべてのOTS公開鍵で構成されるため,とても悪いことになるでしょう(その署名方式をたくさん使用することにしたい場合,かなり多くのOTS公開鍵を持つことになります)。

秘密鍵の記憶量を減らす一つの方法は,秘密鍵を生成するための疑似乱数生成器でシードをしようすることです。この方法では,秘密鍵を保存する必要はなく,必要なのはシードのみです。

しかしこれでも,公開鍵が大きくなりすぎるので実用的ではありません。

Merkle木

OTS公開鍵すべてを,一つのメインの公開鍵にリンクする非常に簡単な方法が一つあります。それはMerkle木を利用することです。これはMerkleによって1979年に考案された解決策で,発表はその10年後でした。

簡単に定義すると次のようになります。 Merkle木は,すべてのノードがその子ノードのハッシュであり,ルートが公開鍵であり,葉がOTS公開鍵のハッシュである基本的な2分木です。

最初にこの木を使って何かに署名するとしましょう。 最初のOTS公開鍵(A)を使用し,それを二度と使いません。次にBのOTS公開鍵,次にCの,最後にDのOTS公開鍵を使用します。したがってこの木では,合計4つのメッセージに署名することができます。木が大きければ,より多くのメッセージに署名することができるのがわかりますね。

これの良いところは,公開鍵が木のルートのみで構成されていて,何かに署名するたびにその署名が少数のハッシュで構成されていることです。これが認証パスとなります。

この例では,OTS鍵(A)による署名は(\(1\),署名,公開鍵A,認証パス)となります。

  • 1は署名の葉の\({\it 番号}\)です。繰り返して覚えておかなければいけないことは,葉のOTSを二度と使ってはいけないことです。このことが署名方式をステーフルにします。
  • \({\it 署名}\)はOTSの公開された秘密鍵です。
  • \({\it 公開鍵}\)は,署名を検証するためのOTS公開鍵です。
  • \({\it 認証パス}\)は,ルート(主となる公開鍵)を再計算することを可能にするノードのリスト(ハッシュのリスト)です。

認証パスについて考えてみます。 前の例を取り上げると,最初のOTS鍵(A)で何かを署名した後の認証パスがハイライトされています。

OTS公開鍵と二つのハッシュ(Aの葉からルートまでの経路にあるすべての隣接ノード)とで,主となる公開鍵を計算できることが分かります。したがって,これが実際に,その主となる公開鍵に由来する署名であることを検証することができます。

このテクニックのおかげで,私たちは,主となる公開鍵を検証するために全てのOTS公開鍵を知る必要はありません。これにより,空間も時間も節約されることになります。

以上がMerkleの署名方式の簡単なイメージです。

コメント・シェア

同一の公開鍵,秘密鍵から1つ以上の署名をするにはどうすればいいでしょうか。

この記事では,ハッシュベース署名方式がどのように構築されるか確認するのが最終目標です。

One-time Signatures(OTS)だけでなくFew-times signatures(FTS)でも可能です。

HORS

HORSは,2002年にReyzin親子によって発表されたBiba(Bins and Balls)を更新したものから作られています。

まず初めに,OTSのように一方向性関数に基づいて秘密鍵となる整数のリストを生成します。そしてそのあとそれぞれについてハッシングし,公開鍵を生成します。

ただし,署名するとき,メッセージ\(m\)に対応したインデックスのリストを与えるための選択関数\(S\)が必要となります。

次の例では,パラメータ\(t=5\)\(k=2\)として進めます。 このとき,メッセージ\(m\)の小数値が10より小さくなるように署名できます。 また,(選択関数\(S\)は2つのインデックスを出力するので)秘密鍵の長さは5であり,署名の長さは2となります。

良い関数(全単射関数)\(S\)を使用すると,秘密鍵から生成される同一の要素で二つのメッセージに署名することは不可能です。しかし,その2つの署名のあとは,新しいものを偽造するのはかなり簡単なはずです。2個目に構築するのはHORS署名方式と呼ばれるものです。これは,一方向性関数の代わりに"サブセット・レジリエント"関数に基づいています。選択関数\(S\)は,\(H(m_2) \subseteq H(m_1)\)となるような2つのメッセージ\(m_1\)\(m_2\)を見つけることが不可能である関数\(H\)に置き換えることができます。

それよりも,複数回署名可能な方式にしたい場合,署名者が\(r\)個の署名を与えたとき,\(H(m') \subseteq H(m_1) \cup \cdots \cup H(m_r)\)となるメッセージ\(m'\)を見つけることは不可能であるべきです。これが,実際には"サブセット・レジリエント"の定義となります。

選択関数\(H\)は,攻撃者が多項式時間で,前の式を確認できる\(r+1\)個のメッセージの集合を(たとえ小さな確率であっても)見つけられない場合,r-サブセット・レジリエントです。 定義に関する部分をそのまま引用します。

Let \(\mathcal{H}=\{H_{i,t,k} \}\) be a family of functions, where \(\{H_{i,t,k} \}\) maps an input of arbitrary length to a subset of size at most \(k\) of the set \(\{0,1,\cdots,t-1 \}\).(Note that for each \(t\) and \(k\), contains a number of fuctions, which are indexed by \(i\)). Moreover, assume that there is a polynomial-time algorithm that, given \(i, 1^t,1^k\) and \(M\), compute \(H_{i,t,k}(M)\).

Definition 1. We say that \(\mathcal{H}\) is \(\it{r-subset-resilient}\) if, for every probablistic polynominal-time adversary A,
\[ \underset{i}{\text{Pr}} [ (M_1,M_2,...,M_{r+1}) \gets A(i,1^t,1^k) \\ \text{s.t.} \,\, H_{i,t,k}(M_{r+1})\subseteq \underset{j=1}{\overset{r}{\cup}} H_{i,t,k}(M_j) ] < negl(t,k). \] Fix a distribution \(D\) on the space of all inputs to \(H\) (i.e., on the space of messages).

しかし,ここでは選択関数は全単射ではないので,元に戻すのは難しいのです。 したがってメッセージの一つ前の署名を知っていても,どのメッセージがそれらのインデックスを使用するのかわかりません。

これは,理論上はランダムなオラクルを使用して,実際にはハッシュ関数を使用して行われます。これが,HORS(=Hash to Obtain Random Subset)と呼ばれる所以です。

他にも選択関数はあります。 メッセージ\(m\)を署名するために,次の手順をふみます。

  1. \(h=Hash(m)\)
  2. \(h\)\(h_1,...,h_k\)に分割する
  3. それぞれの\(h_j\)を整数\(i_j\)と解釈する
  4. 署名は\(sk_{i_1},...,sk_{i_k}\)となる

コメント・シェア

Lamport

1979年の10月18日にLeslie Lamportによってワンタイム署名のコンセプトが発表された。

ほとんどの署名スキームはそのセキュリティの証明に,部分的に一方向性関数,典型的なハッシュ関数に頼っています。ランポート署名の美しさは,この署名がこれらの一方向性関数のセキュリティにだけ頼っているところ。

公開鍵 $ h(x)|h(y)$
秘密鍵 $ (x,y) $

とても単純なスキームとして,\(x\)\(y\)を整数とすると,単一のビットへの署名は,
- もし0なら,\(x\)を公開する
- もし1なら,\(y\)を公開する

それを2度と署名に使わないこと。 もし複数のビットに署名したい場合はどうすればいいか? できることは,署名したいメッセージを固定長の出力となるようにハッシング することです。例えば,SHA-256など。

そのとき,256個の秘密鍵のペアが必要になって,次のようになる。

公開鍵 $ h(x_0)|h(x_0), h(x_1)|h(x_2),...,h(x_{255}) | h(y_{255})$
秘密鍵 $ (x_0,y_0),(x_1,y_1),...,(x_{255},y_{255}) $

そしてもし,\(100110_2....\)に署名したい場合は,\((y_0,x_1,x_2,y_3,y_4,x_5,...)\)というように公開する。

詳細は,Qiitaにも取り上げられているので,そちらに譲る。

Winternitz OTS (WOTS)

Lamportの発表から数か月あと,スタンフォードの数学学科のRobert Winternitzが,\(h(x)|h(y)\)の公開の代わりに\(h^w(x)\)を公開することを提案した。

例えば,\(w=16\)として\(h^{16}(x)\)を公開鍵として公開する場合,\(x\)は秘密鍵。次のバイナリ\(1101_2\)に署名したい場合,\(h^9(x)\)を公開すればいい。

問題は,悪意のある人間が\(h^{10}(x)\)を検索するために,この署名とハッシュを見られることで,それゆえ有効な署名を偽造しうること。

これはメッセージの後ろに短いチェックサム(同様に署名する必要がある)を追加することで回避可能。

Variant of Winternitz OTS

長い長い年月のあと,2011年に,Buchmann et alがWinternitz OTSのアップデートを公開して,鍵でパラメータ化された族を利用して新しいWOTSの変種を紹介した。MACと呼ばれている。

MACで使用される鍵のリストが秘密鍵で,メッセージは何度MACを反復するかを指定することになる。以前の出力が鍵を置き換えるため固有の反復であり,常に同じ公開された入力を使用する。

メッセージ\(M=1011_2\)があり,WOTSの変種が3を基底とするメッセージとして動作するとする(実際には任意の基底\(w\)でも大丈夫)。\(M=(M_0,M_1,M_2)=(1,0,2)\)\(102_3\)を表すとする。

これを署名するには,\((f^1_{sk_1}(x)=f_{sk_1}(x),\, f^0_{sk_2}(x)=sk_2 ,\, f^2_{sk_3}(x)=f_{\{f^1_{sk_3(x)}\}}(x) )\)を公開すればいい。

まだメッセージに署名が必要なチェックサムが適用されるが,詳細割愛。 チェックサムにより,公開鍵の中で\(M_2=2\)と知られていても関係がない。

直感的に,連鎖していくことで公開鍵により良いセキュリティを提供することになる。

Winternitz OTS+(WOTS+)

変種の発表の2年後,Hulsingだけで,署名サイズを短くし,以前のスキームのセキュリティを向上させるアップグレード版を公開した。これは,鍵付き関数族に加えて,連鎖関数を使用する。今度は,鍵は常に同じで,それは一つ前の出力が入力となる。また,一方向性関数が適用される前にランダム値(またはマスク)がXORされる。

入力\(x \in \{0, 1\}^n\),反復カウンタ\(i\in \mathbb{N}\),ランダム要素\(\bf{r}\)\(=(r_1,...,r_j) \in \{0,1\}^{n\times j}(j\geq i)\)とすると,連鎖関数は次のように働く。
\(i=0\)のとき,連鎖関数\(c\)\(x\)を返す\((c_k^0(x,\textbf{r})=x)\)
\(i>0\)のとき,連鎖関数\(c\)は再帰的に次のようになる。 \[ c_k^i(x,\textbf{r}) = f_k(c_k^{i-1}(x,\textbf{r}) \oplus r_i) \] \(f_k\)について,鍵空間\({\cal K}_n\)とすると,関数族\({\cal F}_n:\{f_k : \{0,1\}^{n} \to \{0,1\}^{n} | \,\, k\in {\cal K}_n \}\)を満たす。
要は,圧縮なしの暗号学的なハッシュ関数。

その他のOTSについて

他にもいろいろ提案されている。
- 1994,The Bleichenbacher-Maurer OTS
- 2001,The BiBa OTS
- 2002,HORS
- 2014,HORST, SPHINCS

PQCRYPTO ICT-645622によると,耐量子として,公開鍵署名に推奨されているものは,XMSSとSPHINCS-256。
(XMSSはステートフル署名,SPHINCSはステートレス署名)

コメント・シェア

  • page 1 of 1

Owl

新しいもの好きなフクロウです


モノ作り


Japan