LoginSignup
0
0

More than 1 year has passed since last update.

【IPFS】対応ハッシュ・アルゴリズム一覧【Kubo】

Last updated at Posted at 2023-04-26

Kubo で対応しているハッシュ・アルゴリズム一覧

IPFS コマンド(ipfs)の Go 版実装である Kubo(旧 go-ipfs)がサポートしている、CID に使えるハッシュ・アルゴリズムが知りたい。

TL; DR (今北産業)

  1. --hash オプションでアルゴリズムを指定できます。

    • 例) ipfs add ../hoge.md --hash=sha3-224
    • 注意)この場合、CID のバージョンは CID v1 が使われます。また、実験版のオプションであるため、利用可能なアルゴリズムは将来的に変わる可能性があります。
  2. サポートされている最新のアルゴリズム。

  3. 2023/04/26 現在、(実験的に)IPFS でサポートされているハッシュ・アルゴリズム(一部未実装)

    設定値 備考
    identity ハッシュ化しない(極小さなデータの場合に使われ、入力と同じバイトを示す)1
    sha1 20 年前に定番だったアルゴリズム(現在は非推奨)
    sha2-256 指定がない場合のデフォルトのアルゴリズム。
    20 年前に生まれた、現在では定番のアルゴリズム SHA2 の 256 ビット版(返り値が 256 ビットのハッシュ・アルゴリズム)。現在は SHA3 の利用が推奨されている。
    sha2-512 上記の 512 ビット版
    sha3 NIST 推奨のアルゴリズム(SHA3-512 のエイリアス別名)。後述の KECCAK をベースに NIST が制定した SHA の最新アルゴリズム。
    sha3-224 SHA3 の 224 ビット版
    sha3-256 SHA3 の 256 ビット版
    sha3-384 SHA3 の 384 ビット版
    sha3-512 SHA3 の 512 ビット版(上記 sha3 と同じもの)
    dbl-sha2-256 Double SHA256(SHA256D)と呼ばれる、SHA2-256 を 2 回ストレッチングしたもの。つまり、SHA2 の 256 ビット版のハッシュ関数に通したものを、さらに通したもの。ビットコインなどでも使われてる。2
    murmur3-x64-64 MurmurHash3 の 128 ビット版で x64 プロセッサ向けバージョン 3。 強度・速度では BLAKE3 には敵わないものの、非暗号学的ハッシュ(セキュリティ目的ではないハッシュアルゴリズム)では比較的高速な部類に入る。
    keccak-224 SHA-3 の原型となった KECCAK の 224 ビット版。依存パッケージの問題で廃止4
    keccak-256 KECCAK の 256 ビット版
    keccak-384 KECCAK の 384 ビット版。依存パッケージの問題で廃止4
    keccak-512 KECCAK の 512 ビット版
    blake3 NIST の SHA3 制定にあたり、KECCAK と最後まで争った BLAKE2 の後継。爆速。
    shake-128 SHA3 の可変長(最大 128 ビット)版。パディングしないぶん、SHA3 より若干速い
    shake-256 SHA3 の可変長(最大 256 ビット)版
    sha2-256-trunc254-padded SHA2 の可変長(最大 256 ビット)版
    x11 ブロックチェーンのマイニングなどで使われるストレッチングのアルゴリズム。ストレッチングを行う(複数回ハッシュ関数を通す)際に、ラウンドロビン方式で 11 個の異なるアルゴリズムに通すアルゴリズム。BLAKEBMWGrostlJHKeccakSkinLoofahCubeHashSHavite-3SIMDECHOP が順番に使われる5。依存パッケージが多いため、実装はペンディング(保留)されている4
    md5 SHA1 と並ぶ、20 年前では定番だった 128 ビットのハッシュ・アルゴリズム(現在は非推奨)。
    poseidon-bls12_381-a2-fc1 Etherium や Polygon などの、ブロックチェーンのゼロ知識証明でも使われるハッシュ・アルゴリズム。楕円曲線暗号と同じ考え方で算出しているのが特徴。6

    (出典: multihash.go のソースコードより)

使用例
$ echo 'Hello, Qiita!' > hello_qiita.txt

$ # アルゴリズム無指定
$ ipfs add ./hello_qiita.txt
added QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B hello_qiita.txt
 14 B / 14 B [================================================================] 100.00%

$ # デフォルトのアルゴリズム(上記と比較)
$ ipfs add ./hello_qiita.txt --hash=sha2-256
added QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B hello_qiita.txt
 14 B / 14 B [================================================================] 100.00%

$ # 爆速アルゴリズムを指定
$ ipfs add ./hello_qiita.txt --hash=blake3
added bafkr4ifqg6zutkurq7ctgfrjaqxroevcihgl62atnrfgrwwhxjoqgjzmwu hello_qiita.txt
 14 B / ? [-----------------------------------------------------=-------------]

$ # 最強のアルゴリズムを指定
$ ipfs add ./hello_qiita.txt --hash=sha3
added bafkriqa3kk2tr6i6zcp7snuepiexsfm4h7ujgsdijzqzipgeovpsy6ujilfm7ozg2g5a76vysvffzb2nkcvkvk7nuemau6xksqgerp4vxkxh4 hello_qiita.txt
 14 B / ? [-----------------------------------------------------=-------------]

Web Gateway 経由でコンテンツを取得する場合、(古いバージョンや experimental が有効になっていないため)63 文字以上の CID は受け付けないことが多いです。SHA3 などの 512 ビット系アルゴリズムを使った CID を発行する場合は注意します。

TS; DR (コマンドのヘルプが助けにならないのでソースを確認した)

ローカルの IPFS リポジトリにコンテンツを追加して CID(コンテンツ ID)を発行したい場合、通常は以下のように ipfs add コマンドを実行します。

$ ipfs add ./hoge.md
added QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B hoge.md
 14 B / 14 B [================================================================] 100.00%

この場合、(Qm... から始まる CID)の CID バージョンは v0 で、使われるハッシュ・アルゴリズムはデフォルトの SHA2-256 です(2023/04/26 現在)。

複数のラズパイ Zero で IPFS ノードを立ち上げているのですが、コンテンツの同一性を高めるために、ノードごとに CID 発行時に利用するハッシュ・アルゴリズムを変えたいと思いました。

つまり、SHA-1 はもってのほか、20 年選手の SHA-2 でもはなく、SHA-3 などの新しいハッシュ・アルゴリズムの CID でも提供したかったのです。

ipfs help add を見ると、ipfs add ./hoge.md --hash=sha3-224 のように、実験的(experimental)ではあるものの--hash オプションでアルゴリズムを指定できることはわかりました。

しかし、ヘルプには「デフォルトは sha2-256」としか情報がなく、指定できるアルゴリズムがわかりません。調べてみたところ、BLAKE3 などの爆速アルゴリズムもサポートしていたので、正式サポートまでの、自分のググラビリティとして。

参考文献

  1. Remarks | Class HashingAlgorithm | HashingAlgorithm | API Documentation @ richardschneider.github.io

  2. https://en.bitcoin.it/wiki/Protocol_documentation#Merkle_Trees

  3. https://en.wikipedia.org/wiki/MurmurHash

  4. https://github.com/multiformats/go-multihash/issues/120 2 3

  5. https://academy.bit2me.com/en/what-is-x11-mining-algorithm/

  6. POSEIDON: A New Hash Function for Zero-Knowledge Proof Systems @ IACR

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0