IPFS を初期化する際、
ipfs init
で指定できる署名鍵の暗号アルゴリズムが知りたい。
つまり --algorithm
オプションの値が知りたいのです。しかし、ipfs init --help
を見ても、デフォルトは ed25519 としか記載されていません。「ipfs init algorithm」とググってみても、「ipfs init
で初期化します」程度の記載しかなかったので、自分のググラビリティとして。
TL; DR (今北産業)
- 指定可能な署名鍵のアルゴリズム:
-
rsa
,ed25519
の 2 種類(go-ipfs
v0.12.2 現在)。
-
-
-a rsa
/--algorithm rsa
の場合のみ-b
/--bits
オプションで鍵の長さが指定できる。-
-a rsa
は 2048 bit がデフォルトなため、RSA を指定する場合は 4096 bit を指定した方が良いのですが、速度が犠牲になります。
-
- 速度・強度の面で、無指定(デフォルト)の
ed25519
で十分。
TS; DR
IPFS の初期化で作成される秘密鍵・公開鍵を RSA の 4096 ビットで作成する例。
$ ipfs init -a rsa -b 4096
generating 4096-bit RSA keypair...done
peer identity: Qmd68mqs6RBm3T5MmEBehsfUSsT3VcpDCb456bbfKSHRg7
initializing IPFS node at /Users/admin/.ipfs
to get started, enter:
ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme
ipfs init ...
時に指定するアルゴリズム名は、基本的に「データの署名」に使われます。ピア同士の通信で、データそのものを暗号化するために使われるわけではありません。
作成された公開鍵・秘密鍵のペアは、公開鍵が「ピアの識別 ID」(peer ID
)として使われ、秘密鍵が「ピアの署名用」として使われます。
具体的には、ipfs name publish ...
すると、自身のリポジトリに add
されているファイルを署名し IPFS ネットワークに通知します。他のピアは、この署名を持ってどのピアが該当 CID を持っているか判断できます。ipfs add
しただけでは、離れているピアからコンテンツが見つからないのは、署名して通知していないためです。
そのため、ipfs init
には「署名」に特化した Ed25519
暗号を使うのがベストです。そして、特定のピアとだけシェアしたいデータは、別途 RSA 鍵で暗号化したファイルを IPFS を通してシェアするのが妥当です。
2022 年現在、RSA の 4096 bit であれば十分強固であるものの、RSA 暗号方式は 40 年選手であるため、10 年選手である EdDSA アルゴリズム の Ed25519
を使った署名の方がベターです。しかし、相手も Ed448
のアルゴリズムが使える場合は、Ed448
がベストでしょう。とは言え、いずれを使う場合でも、近い将来スタンダードが変わることが決まっていることに留意します。
ed25519
による署名は速く、強固なのですが、署名鍵作成時の内部のハッシュ関数に 20 年選手である SHA-2 の SHA512
を利用しています。SHA-1 および SHA-2 のベースとなるマークル・ダンガード構造の突破方法は 17 年前に論文で発表されているからです。これに耐性のある SHA-3 を内部のハッシュ関数に使っているのが Ed448 で、Ed25519
と同じ EdDSA に属します。とは言え、Ed448
は Ed25519
より強いとされるものの、実験的要素もあることから、事実上 Ed25519
の方がデファクト・スタンダードとなっています。 IPFS でも Ed448
は実装されていません。
留意すべき点は、RSA、Ed25519
、Ed448
のいずれであっても、来たる量子コンピューターの素因数分解能力で崩れることが分かっているため、近い将来、別の暗号アルゴリズム署名アルゴリズムに変わることがほぼ決まっていることです。逆に言えば、その時が来たら Ed448
も変わるため、汎用性・速度・強度を加味すると Ed25519
が落とし所です。(2022年5月現在)
【2022/07/28 追記】 現在 NIST が行っている、対量子コンピューターのアルゴリズム合戦 "Post-Quantum Cryptography" の 3 ラウンド目で、電子署名アルゴリズム部門のファイナリストに残った 3 つのうちの 1 つ CRYSTALS-DILITHIUM も内部で SHA3 を使っていました。2024 年に結果が発表されるらしいので、ed25519
に続く新たなスタンダードが近いうちに決まりそうです。見逃せない!
- 参考文献:
- IPFSのソースコード: github.com/ipfs/go-ipfs/config/init.go#L198-L227 | Commit ID d18f1f7 @ GitHub
- Ed25519 | SSH 鍵 @ archlinux.jp