SHRIMPS:マルチデバイス間でステートフルな署名を実現する耐量子暗号
ビットコインコミュニティではビットコインの量子耐性獲得に向けた議論が活発に行われており、様々な暗号方式の研究・提案がされています。
現状、各暗号方式の中で注目を浴びている暗号に「ハッシュベース署名」が挙げられます。これはハッシュ関数が持つ一方向性(ブラックボックス的な性質)を安全性の根拠としており、量子コンピュータが暗号解読に用いる「Shorのアルゴリズム」を適用することはできません。
また、1979年ごろから(ランポート署名を筆頭に)ハッシュベース署名の研究が積み重ねられてきた歴史があります。この暗号学的な成熟に加え、ビットコインが初期から採用してきたハッシュ関数のセキュリティモデルとの親和性の高さが、量子耐性の文脈で注目を集めている理由だと筆者は考えます。
さて、タイトルにもなっている「SHRIMPS」はBlockstream社が研究を進めているハッシュベースの耐量子署名方式です。2026年3月27日に公開されたこの提案は、以前ビットコイン研究所で解説した「SHRINCS」が抱える課題を改善することを目的としています。
両者は一長一短の関係にあり、SHRIMPSはSHRINCSを置き換えるものではなく、補完的な役割として設計されている点がポイントです。SHRINCSの詳細については、以下の記事をご参照ください。
本稿ではSHRIMPSの概要を解説し、ビットコインの耐量子化に向けてどのような役割が期待されているのかを見ていきます。
両方式はともに「SPHINCS+」というハッシュベースの署名アルゴリズムを利用しています。公式には名前の由来は発表されていないためSPHINCS+の言葉をもじって名づけられたのではないかと筆者は推測しています。
・SHRINCS:英単語のshrinks(縮む)を掛けてSPHINCS+より署名サイズが小さいことを意図
・SHRIMPS:shrimps(小エビ)を掛けてSPHINCS+より小さく、小エビの群れを「マルチデバイス対応」と紐づけている(後ほど説明)
背景:SHRINCSが抱えるマルチデバイス問題

耐量子署名をビットコインに導入する上でのペインは署名サイズの大きさです。
現在ビットコインで使われているSchnorr署名(シュノア署名)は約64バイトと非常にコンパクトですが、NISTが採択した耐量子署名「SLH-DSA」を使うと署名サイズは約7,856バイトまで膨れ上がります。
署名サイズが大きくなるほどブロックを圧迫し、取引手数料の高騰に繋がるため大きな問題として認識されています。
そこで2025年12月にBlockstreamのJonas Nick氏により署名サイズを約324バイトに抑えたハッシュベースの「SHRINCS」という署名が提案されました。
SHRINCSは署名の状態(ステート)を記録しておくというアプローチにより署名データを抑えることに成功しましたが、単一デバイスの利用が前提の設計でした。つまり、複数のデバイス間で状態を共有・同期することは困難を極めます。
その結果、シードフレーズから復元した新しいデバイスでは状態を引き継ぐことができず、サイズの大きい署名方式にフォールバック(代替)せざるを得ません。
このマルチデバイス問題の解決のために提案されたのが「SHRIMPS」です。
SHRIMPSとは

SHRIMPSでは、1つの公開鍵(Public Key)に対して「コンパクト・パス」と「フォールバック・パス」という2種類の署名方法を使い分けることができます。
どちらのパスも「SPHINCS+」というステートレスな暗号方式を利用していますが、パラメータ(署名できる回数の上限 \(q_s\))が異なる点が特徴です。
SPHINCS+はあらかじめ膨大な数の署名鍵を用意しておき、署名のたびに疑似ランダムに1つを選んで使う仕組みです。同じ鍵が偶然何度も選ばれてしまう確率を無視できるレベルまで下げるために、1つの鍵で安全に生成できる署名回数に上限(\(q_s\))を設けています。 \(q_s\)を小さく設定するほど暗号の構造自体を小さくでき、結果として署名サイズを小さくすることが可能です。
SHRIMPSの公開鍵は、この性質の異なるSPHINCS+の署名上限を小さく抑えた「コンパクト・パス」と、上限を大きく取った「フォールバック・パス」の公開鍵をハッシュ化して作成されています。
署名を行う際は、鍵の過去の署名回数を参照し、上限を超えていなければコンパクト・パス、超えていた場合はフォールバック・パスを用いる設計です。
1. Compact path(コンパクト・パス)
ビットコインでは、一度署名を行ったアドレスの再利用は公開鍵が露出する観点から推奨されておらず、1つのアドレスで署名を行う回数はせいぜい数回だと考えられます。
ここでコンパクト・パスの署名バジェット(署名することができる上限)を以下のように設定することを考えてみます。
\[ q_s = n_{dev} \times n_{dsig} \]- \( q_s\):署名バジェット
- \(n_{dev}\):シードから復元できる回数
- \(n_{dsig}\):1デバイスで署名できる回数
上式より公開鍵の露出を防ぐ観点で1台のデバイスで署名できる回数を1回( \(n_{dsig}=1\))に制限すると署名バジェット(\( q_s\))はシードから復元できる回数と一致します。(\(q_s=n_{dev}\))
シードフレーズの入力は手作業のため頻繁に復元することはありませんが、保守的な値として \(n_{dev}\)(シードから復元できる回数)を \(2^{10}=1024\)と設定すると、署名サイズは2,564バイトとなりSLH-DSAの7,856バイトと比べて約3分の1の大きさまで小さくすることが可能です。
また、 \(n_{dsig}=2^4\)(16回)まで許容した場合でも署名時間はかかりますが署名サイズは3,000バイト以下に収まります。
2. Fallback path(フォールバック・パス)
コンパクト・パスの署名バジェットを使い切った場合( \(n_{dsig}=1\)とし2回目以降の署名が発生した場合など)は、フォールバック・パスで署名を行う必要があります。 \(q_s\)を大きく取ったパラメータを使うため署名サイズは大きくなりますが、実質的に無制限に署名できる予備として機能します。
例として \(q_s=2^{64}\)と設定すると署名サイズは7,856バイトとなり、また \(q_s=2^{40}\)とすると約4,500バイト未満に収まります。
SHRIMPSの署名方法
SHRIMPSの署名方法は非常に単純で送金者は、「選択したパスの署名」と「使っていないパスの公開鍵(16バイト、兄弟公開鍵)」を提出することで完結します。
署名を検証する側は、SPHINCS+の署名から「実際に使われたパスの公開鍵(16バイト)」を復元し、もう一方の16バイトの公開鍵と合わせてハッシュ化することで大元の公開鍵を再構成します。
最後に、この再構成した公開鍵が、あらかじめ記録されている公開鍵と一致するかを確認するという流れです。
SHRINCSとSHRIMPSのハイブリッド実装が期待されている
SHRIMPSのコンパクト・パスは \(n_{dev}=2^{10}=1024, n_{dsig}=1\)と設定することで署名サイズを2,564バイトまで縮小することができましたが、現在使われているSchnorr署名は約64バイトであるため未だビットコインにおいては使用しづらいサイズ感です。この問題を解消するために以前提案された耐量子署名のSHRINCSとのハイブリッドによる実装が期待されています。
最初に使い始めるデバイスでは何回署名を行ったかを記録、つまり状態の更新が可能なためSHRINCSのステートフル方式を用いることが可能です。このとき署名サイズは最小で324バイトに収めることができます。
次にデバイスが故障したり、上手く状態を更新することができなくなった場合は、シードフレーズからバックアップしたセカンドデバイスを用いることとなります。このときフォールバックとしてSHRIMPSの署名バジェットが小さいコンパクト・パスに切り替えることが可能です。
もとのSHRINCSではフォールバックとして約7.8KBの署名を行うことが提案されていたので署名サイズは約3分の1以下まで縮小することができます。またそこまでシードフレーズからバックアップすることはないと思いますが3台目以降もSHRIMPSの特徴を引き継ぎ、ステートフルに独立してバックアップすることが出来そうです。
補足:SPHINCS+について
SPHINCS+は暗号学的ハッシュ関数のみに基づく耐量子デジタル署名方式です。NISTの耐量子暗号標準化のコンペティションの一環として選定されSLH-DSA(Stateless Hash-based Digital Signature Algorithm)としてFIPS 205にてドキュメント化されています。
SPHINCS+は以下の3つの署名方式を組み合わせた多層構造となっているのが特徴です。WOTS+とFORSには株式会社Chaintope CTOの安土茂亨氏の解説動画リンクを添付しているのでご参照ください。
Merkle Treeに関しては過去の記事内にて概要を触れています。
SPHINCS+は多層構造(ハイパーツリー)により膨大な数の少数署名鍵を用意することができ、同じ鍵を2回選択してしまう可能性を統計的に無視できるよう設計され、状態管理が不要なステートレスな運用を実現しています。
まとめ
SHRIMPSは、SHRINCSが抱えていた「マルチデバイス間で状態を共有できない」という課題を解決するために提案された、ハッシュベースの耐量子署名方式です。署名回数の上限が異なる2つのSPHINCS+インスタンス(コンパクト・パスとフォールバック・パス)を状態に応じて使い分けることで、シードフレーズから復元したデバイスでも約2.5KBというコンパクトな署名を独立して利用できます。これはSLH-DSAの約3分の1のサイズです。
さらに、単一デバイスでは324バイトのSHRINCS、復元後のデバイスではSHRIMPSのコンパクト・パスを使うハイブリッド実装により、実運用に耐える耐量子ウォレットの実現が期待されます。ビットコインの耐量子化はまだ議論の途上にありますが、ハッシュベース署名の実用化に向けた着実な一歩と言えるでしょう。
関連記事
最新記事
読者になる
ビットコイン研究所の新着記事をお届けします。


ディスカッション