coinb.in が本当にブラウザ内で署名しているかどうか確かめた


Screenshot of github.com

coinb.in には2種類あります。それは、サイトのcoinb.in とソフトウェアのcoinb.in です。↑上のやつが、ソフトウェア(javascript) のcoinb.inです。

Screenshot of coinb.in

そして↑これが、サイトのcoinb.in です。どちらもOP_RETURNを送信できるソフトウェアウォレットですし、両者は同じものであると主張されてはいますが、サイトの方は裏でサーバーサイドスクリプトが動いているかもしれず「本当に同じものかどうか」は中々難しい問題です。秘密鍵をインターネットに送信してるんじゃないか、と疑ってしまうわけです。

サイトのcoinb.in のトップページ下部には次の記述があります。


This page uses javascript to generate your addresses and sign your transactions within your browser, this means we never receive your private keys, this can be independently verified by reviewing the source code on github. You can even download this page and host it yourself or run it offline!

<翻訳>このページでは、JavaScriptを使用してアドレスを生成し、ブラウザ内でトランザクションに署名します。つまり、秘密鍵を受け取ることはありません。これは、githubのソースコードを確認することで個別に確認できます。このページをダウンロードして自分でホストしたり、オフラインで実行したりすることもできます。


まあ、そんなことが書いてあってもホントかな?と思ってしまいます。ソースコードを全部確認する気力もありません。そこで、オフラインで署名できるかどうか、実際に確かめてみました。

1、インターネット接続した状態で、coinb.in にアクセスして、署名前のトランザクションを作成し、保存しておく。これは秘密鍵を使わない作業だから安全ですね。

2、githubからソースコードをダウンロードしてくる。以下のURLをブラウザのアドレスバーに入力してエンターキーを押す。この時は version 1.6 が取得できました。

https://github.com/OutCast3k/coinbin/archive/refs/heads/master.zip

3、ダウンロードフォルダでzip ファイルを右クリックして、「全て展開」を選択し、左クリックして解凍する。

4、パソコンのインターネット接続を全て切断する。LANケーブルを抜き、wifi接続を切断する。yahoo.co.jpなどのURLを入力して、「インターネットに接続されていません」と表示されることを確認する。

5、上記 master.zip 展開先フォルダの、index.htmlを左クリックしてページを開く。ブラウザのアドレスバーにローカルディスクのディレクトリが表示されていることを確認する。

6、署名前トランザクションをverify タブにペーストして、submit をクリックしてみる。→トランザクションの内容が表示されればOK。

7、署名前トランザクションをsignタブにペーストして、秘密鍵も入力して、submit をクリックしてみる。→インターネットに接続していないにも関わらず署名済みトランザクションが生成されればOK。

うーん、確かに署名できました。署名済みトランザクションが、オンライン時に作成され実際に送信され承認されたものと同じであることも確認できました。新規アドレスおよび秘密鍵もオフラインで生成できることを確認しました。こちらのページをご覧になった貴方も、是非自分のPC内でオフラインで秘密鍵生成&署名できるかどうか、試してみると良いでしょう。オフラインで秘密鍵生成&署名できた場合、それは、「秘密鍵は外部に漏洩されず安全である」ということを意味します。


コメントを残す

メールアドレスが公開されることはありません。