Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

ripemd160をpythonで試す

ripemd160は160ビット(=20バイト)の値を返すハッシュ関数です。
pythonでは以下で計算できます。

#!/usr/bin/env python

import hashlib
h = hashlib.new('ripemd160')
h.update(b"abc")
r1 = h.hexdigest()

print(r1)
print("len "+str(len(r1)))
8eb208f7e05d987a9b044a8e98c6b087f15a0bfc
len 40

bitcoinではsha256とripemd160の2つのハッシュ関数が使われます。 sha256は有名なので分かりますが、なぜripemd160というマイナーなハッシュ関数が使われているのでしょうか?

明確な理由は不明ですが、256より少し小さいが、十分な強度で、かつsha256と組み合わせることで攻撃に対して少しでも強度を上げるためのようです。

https://en.wikipedia.org/wiki/RIPEMD

自作したい場合はこの辺りを参考にすればいいようです。

https://homes.esat.kuleuven.be/~bosselae/ripemd/rmd160.txt

またopensslコマンドにも実装されているのでそれで取ることも可能です。

$ openssl list-message-digest-commands
md4
md5
mdc2
rmd160
sha
sha1
$ echo -n "abc" |openssl rmd160
(stdin)= 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc