ネットサービス

「そのツイート自身」を引用する自己引用ツイートを作成するにはどうすれば良いのか?


Twitterにて「そのツイート自身を引用しているツイート」を行うことに成功したエンジニアのオシーン・モランさんが、その方法についてブログで解説しています。

Oisín Moran | How I Made a Self-Quoting Tweet
https://oisinmoran.com/quinetweet


自己引用に成功したツイートは下記の通り。


Twitterのサイトで確認すると、ツイートのURLがツイート内に記述されており、無限参照状態になっていることが分かります。


モランさんによると、自己引用ツイート作成の要点はツイートIDがどのような規則で生成されているのかの推測にあるとのこと。TwitterではツイートIDにSnowflake IDという形式を採用しており、この形式ではIDの数字を2進数に変換したときに最初の41ビットが「タイムスタンプ」、続く10ビットが「マシンID」、最後の12ビットが「シーケンス番号」となっています。


全部で63ビットもあるため、完全にランダムで当てに行くのはほぼ不可能です。しかし、最も大きな要素であるタイムスタンプ部分は簡単に推測できるため、最大1024パターンのマシンIDおよび最大4096パターンのシーケンス番号を当てることができれば自己引用ツイートを行うことが可能です。

モランさんはまず、Twitterの開発者アカウントを用意し、twurlを利用してプログラムからツイートを行えるようにしました。2つのツイートを続けて送信することで、IDの変化を観察したとのこと。例えば、以下の2つのツイートはIDが「1309237975868469248」「1309237977982345216」となっていますが、これをSnowflakeの形式に当てはめると前者が「タイムスタンプ:312146657912」「マシンID:375」「シーケンス番号:0」で、後者が「タイムスタンプ:312146658416」「マシンID:362」「シーケンス番号:0」になり、2つ目の投稿は504ミリ秒後だったこと、マシンIDが13異なっていること、シーケンス番号がともに0だったことが判明しました。シーケンス番号で一番多いのは0だとすると、完全にランダムな要素はマシンIDのみとなり、総当たりで突破が可能です。


モランさんはタイムスタンプのずれを修正しつつ、APIの制限に引っ掛かるまでツイートを送信し続けました。プログラムの様子は下記の通りで、ツイートIDの下にタイムスタンプとマシンID、シーケンス番号のズレがそれぞれどれくらいなのかが表示されています。特に3つ目のIDはタイムスタンプとマシンIDが一致したもののシーケンス番号が1だけ違っていたもので、非常に惜しいところまで迫っていました。


そして960ツイート目で見事自己引用ツイートに成功。



モランさんはブログの末尾で、この1ツイートのせいでツイートの構造が有向非巡回グラフではなくなってしまったことについて、Twitterの技術者に「非常に申し訳なく思う」と述べていました。

この記事のタイトルとURLをコピーする

・関連記事
Twitterのトレンドの半分近くがボットに操作された人為的なものだったことが判明 - GIGAZINE

Twitterでフェイクニュースを指摘された人は「かえって意見が偏っていく」との研究結果 - GIGAZINE

「Linux搭載PC」を名刺にしてしまった猛者が登場 - GIGAZINE

「ゲームでの戦車の描写が間違っている」と軍の機密文書をネットに公開してしまったプレイヤーが登場 - GIGAZINE

18年間無料のインターネットのために娘の名前を「ネット会社にちなんだ名前」にしてしまった両親が登場 - GIGAZINE

in ソフトウェア,   ネットサービス, Posted by log1d_ts

You can read the machine translated English article here.