署名をツイートすると家バレ🏡する!?
はじめに
はじめまして、vividotと申します。
「DeFiで落ちてるお金を拾いたいブログ (タイトル詐欺)」でたまに記事を書いていますが、お小遣いが稼げると聞いて出張してきました。
今回は、Ethereumの「署名」と「署名をツイートすること」について書きたいと思います。
早速タイトル詐欺をかましておりますが、正しくは「署名をツイートするとアドレス🏡がバレる」という内容です。
よろしくお願いします。
そもそも署名ってなんぞや
Ethereumにおける署名は「署名したアドレスの(秘密鍵の)所有者」であることを証明します。
また、同時に署名されたメッセージが改ざんされていないことを検証することもできます。
百聞は一見に如かず、と言いますし実際の署名の検証を見てみましょう。
Etherscanでは署名とアドレス、メッセージを送信することで、その署名が正しいことを確認してくれるサービスが提供されています。
Etherscan Message Signature #2720より
この場合は、署名「0x8f6bf12afc5cef9a792377...」を公開することでメッセージ「This is a verified signature of ....」がアドレス「0xbac16278a43eec2113...」によって署名された正しいメッセージということが検証されています。
署名の使い道と危険性
署名自体はDeFiでも多々用いられていますが、それ以外にもよく「署名をツイートさせる」ことがあります。
というのも昨日からTwitterのTLに「#異世界妹NFT のキャンペーンに参加してトークンを獲得しよう! @screenName sig:0x.....」というツイートがたくさん流れております。
運営様のツイートを拝見すると「取引所アドレスなどを防止して、トークンを扱えるウォレットであることを確認するためにこのようなフォーマットにさせていただいております!(引用元ツイート)」と述べており、至極真っ当な用途で素晴らしいと思います。
しかし、署名をツイートするということは自身のアドレスをTwitterで公開しているのと等しいということを理解する必要があります。
(この方法が悪いという訳ではなく(一般的です)それぞれで自衛しようという話です)
アドレスがばれると何か問題があるの?
結論から言うとありません。
特にBCGを含むNFT界隈は、一瞬でアドレスがばれますし気にしていない人も多いと思います。
一方、DeFi界隈の人間はアドレスばれを警戒する傾向にあります。
理由は多々あると思いますが、
①自身の資産額(の一部)を公開してリスクを負いたくない(特にTwitterとリアルの人間が紐付いている人)
②イキってる割に全然お金持ってない
③損してるから恥ずかしい
といった所でしょうか。
ちなみに自分は②です。
ここまで書いて、実際にTwitterでアンケートをとってみると、このような結果となりました。
一応感覚と一致していますが、意外と「公開してもいい」と思ってる人がいることにはびっくりしました。
(執筆時点でアンケート継続中なので、後で見たら結果が変わっている可能性はあります)
なぜアドレスがばれるのか
署名の仕組みについては既にたくさん記事があるので割愛しますが、署名の検証に必要なのは「署名」と「アドレス」と「メッセージ」です。
一方、どのアドレスが署名したかを知りたいだけであれば「署名」と「メッセージ」だけで済みます。
というのも署名の検証は「署名」と「メッセージ」から得られる「アドレス」が、提供された「アドレス」と正しいかを確認しているためです。
では、実際に前述の異世界妹NFTの例からアドレスを取得してみましょう。
まず、「署名」はツイートから入手することが出来ます。
人様のアドレスを勝手に記事で公開するのもよろしくないと思いますので自分でツイートしました。
署名は「0x9c347f50a92aad0a1cbd5aae0c479f848389d006e66d09b4eb18189ab6447f5f6944f12d493957cd1b55c20d40197e421cf8ea18f8defe926a54f7f102b3d37c1b」です。
「メッセージ」はHPにアクセスして署名を試みてみると何に署名させられているかが分かります。
異世界妹NFTの場合は「isekai imouto NFT」ですね。自分が今までに見た中では「Twitterのスクリーンネームに署名させる」というサービスもありました。
これで必要なデータは揃ったので後は計算するだけ、ちなみにether.jsよりweb3.jsが好きです。
const Web3 = require("web3");
const web3 = new Web3();
let message = "Isekai Imouto NFT";
let signature = "0x9c347f50a92aad0a1cbd5aae0c479f848389d006e66d09b4eb18189ab6447f5f6944f12d493957cd1b55c20d40197e421cf8ea18f8defe926a54f7f102b3d37c1b";
let account = web3.eth.accounts.recover(message, signature);
console.log(account);
このプログラムを実行すると「0x11111111B241300CF7032b0fd65509B95A96bE5a」というアドレスが得られました。
これは自分が署名したアドレスと同じです。あ~怖い。
ちなみにこのアドレスは新しく生成したアドレスで1ETHも入っていません。
自分の観測範囲にいるDeFi界隈の人は、署名のツイートを求められた時、同様に新しいアドレスを作ることが多いと思います。
最後に
以上のように、署名とメッセージから非常に簡単にアドレスを得ることができました。
アドレスがバレたところで実害はないのですが「こうやってアドレス見てる気持ち悪い奴がいるんだな」と思った方は今後、捨てアドレスでの署名をオススメします。
最後に、異世界妹NFTのHPはこちら!
キャンペーンをシェアした人から100名にキャンペーントークン(異世界妹NFTの売上の一部を受け取ることができるトークン)が当たります!
是非ご参加ください!(関係者ではありません笑)
フッター
フッター①
画面の下の方の文章が個人的に読みにくいので調整用に入れています。
モニタの下の方の文章が読みにくいのって僕だけでしょうか。
フッター②
宣伝です。
カバー用画像です。