こんにちは。AndGoのハードウェア担当の片山です。
今回はマイコンなどの低スペックのプロセッサ上でも動作するハードウェア用ライブラリであるuBitcoin (Micro-Bitcoin)のリポジトリの中身を見てみたいと思います。
UBITCOINとは
uBitcoin(https://github.com/micro-bitcoin/uBitcoin)は32bitマイコン用の軽量なビットコインライブラリです。鍵生成,リカバリーフレーズの生成,拡張公開鍵の生成,トランザクションへの書名といったウォレットを作るために必要なものが一通り揃っています。前回紹介したBowserWallet(https://github.com/arcbtc/bowser-bitcoin-hardware-wallet)やKooper(https://github.com/arcbtc/koopa)や昨年12月1日の記事でも同様のライブラリが使用されています。作者はSpecter Walletの開発にも携わっているStepan Snigirevというドイツの方で,個人で開発をされているようです。
uBitcoinはハードウェアに依存しないC++で書かれているので,様々なマイコンで使用することができ,Trezorなど多くのハードウェアウォレットに採用されているSTM32はもちろん,RISC-VやESP32などでも使うことができます。また,Arduino IDEからライブラリを簡単にインポートできますので(https://www.arduino.cc/reference/en/libraries/ubitcoin/),M5Stackのようなホビー用途でも使われているプラットフォームを利用して,独自のハードウェアウォレットを作ることもできてしまいます。ただし,Arduino IDEに対応しているとはいっても,Arduino Unoには対応していません。というのも,Arduino Unoは搭載しているマイコンが8bitですし,フラッシュメモリも32kBしかないためです。
また,楕円曲線暗号やハッシュ関数等の演算についてはオリジナルではなく,trezorのものをつかっています。きちんとメンテナンスされているコードですので信頼もおけるはずです。