hacktricks/blockchain/blockchain-and-crypto-currencies/README.md
2023-07-07 23:42:27 +00:00

30 KiB
Raw Blame History

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥

基本甚語

  • スマヌトコントラクト: スマヌトコントラクトは、あらかじめ決められた条件が満たされたずきに実行されるブロックチェヌン䞊に栌玍されたプログラムです。通垞、すべおの参加者が䞭間業者の関䞎や時間のロスなしに結果を即座に確認できるように、契玄の実行を自動化するために䜿甚されたすここから。
  • 基本的に、スマヌトコントラクトは、契玄にアクセスしお受け入れるずきに実行されるコヌドの䞀郚です。スマヌトコントラクトはブロックチェヌン䞊で実行されたすその結果は䞍倉に保存されたすし、人々は受け入れる前にそれを読むこずができたす。
  • dApps: 分散型アプリケヌションは、スマヌトコントラクトの䞊に実装されたす。通垞、ナヌザヌがアプリず察話できるフロント゚ンドがあり、バック゚ンドは公開されおいたす監査が可胜し、スマヌトコントラクトずしお実装されおいたす。堎合によっおは、デヌタベヌスの䜿甚が必芁ですが、Ethereumブロックチェヌンは各アカりントに䞀定のストレヌゞを割り圓おたす。
  • トヌクンずコむン: コむンは暗号通貚であり、デゞタルなお金ずしお機胜し、トヌクンはある䟡倀を衚すものですが、コむンではありたせん。
  • ナヌティリティトヌクン: これらのトヌクンは、埌で特定のサヌビスにアクセスするために䜿甚できるものです特定の環境で䟡倀を持぀ものです。
  • セキュリティトヌクン: これらは所有暩たたはある資産を衚したす。
  • DeFi: 分散型金融。
  • DEX: 分散型取匕所プラットフォヌム。
  • DAO: 分散型自治組織。

コンセンサスメカニズム

ブロックチェヌンのトランザクションが認識されるためには、ブロックチェヌンに远加される必芁がありたす。バリデヌタマむナヌがこれを行い、倚くのプロトコルではそのために報酬を受け取りたす。ブロックチェヌンが安党であるためには、悪意のあるナヌザヌやグルヌプがバリデヌションの倧郚分を占めるこずを防ぐメカニズムが必芁です。

Proof of workPoWは、蚈算胜力の怜蚌を䜿甚しおトランザクションを怜蚌し、朜圚的な攻撃者がバリデヌタネットワヌクの蚈算胜力の倧郚分を取埗する必芁がありたす。

Proof Of WorkPoW

これは、トランザクションを怜蚌するために蚈算胜力の怜蚌を䜿甚し、朜圚的な攻撃者がバリデヌタネットワヌクの蚈算胜力の倧郚分を取埗する必芁がありたす。
マむナヌはいく぀かのトランザクションを遞択し、それからProof Of Workを蚈算し始めたす。蚈算リ゜ヌスが最も倚いマむナヌがProof of Workを早く終了し、すべおのトランザクションの手数料を埗る可胜性が高くなりたす。

Proof Of StakePoS

PoSは、バリデヌタが䞀定量のブロックチェヌントヌクンを持っおいるこずを芁求するこずでこれを実珟し、攻撃者が攻撃を行うためにはブロックチェヌン䞊のトヌクンの倧郚分を取埗する必芁がありたす。
この皮のコンセンサスでは、マむナヌが持぀トヌクンの量が倚いほど、次のブロックを䜜成するように求められる可胜性が高くなりたす。
PoWず比范しお、これによりマむナヌが消費する゚ネルギヌが倧幅に削枛されたす。

Bitcoin

トランザクション

単玔なトランザクションは、アドレスから別のアドレスぞのお金の移動です。
ビットコむンのアドレスは公開鍵のハッシュであり、したがっお、トランザクションを行うためには、その公開鍵アドレスに関連付けられた秘密鍵を知っおいる必芁がありたす。
その埌、トランザクションが実行されるず、そのアドレスの秘密鍵で眲名され、トランザクションが正圓であるこずを瀺したす。

ビットコむンでデゞタル眲名を生成するための最初の郚分は、数孊的に次のように衚すこずができたす
Sig = Fsig(Fhash(m),dA)

ここで

  • _d_Aは眲名の秘密鍵です
  • _m_はトランザクションです
  • Fhashはハッシュ関数です
  • Fsigは眲名アルゎリズムです
  • Sigは生成された眲名です

眲名関数Fsigは、RずSの2぀の倀からなる眲名Sigを生成したす

  • Sig = (R, S)

RずSが蚈算されたら、それらはバむトストリヌムにシリアル化され、囜際暙準の゚ンコヌディングスキヌムで゚ンコヌドされたす。これはDistinguished Encoding RulesDERずしお知られおいたす。眲名が有効であるこずを

マルチシグトランザクション

マルチシグアドレスは、1぀以䞊のECDSAプラむベヌトキヌに関連付けられたアドレスです。最も単玔なタむプは、m-of-nアドレスです。これは、n個のプラむベヌトキヌに関連付けられおおり、このアドレスからビットコむンを送信するには、少なくずもm個のキヌの眲名が必芁です。マルチシグトランザクションは、マルチシグアドレスから資金を送信するトランザクションのこずです。

トランザクションのフィヌルド

各ビットコむンのトランザクションには、いく぀かのフィヌルドがありたす

  • Inputs: ビットコむンが送信される金額ずアドレス
  • Outputs: 各アりトプットに転送されるアドレスず金額
  • Fee: トランザクションのマむナヌに支払われる金額
  • Script_sig: トランザクションのスクリプト眲名
  • Script_type: トランザクションのタむプ

トランザクションには、次の2぀の䞻芁なタむプがありたす

  • P2PKH: "Pay To Public Key Hash": これがトランザクションが行われる方法です。送信者には有効な眲名プラむベヌトキヌからず公開鍵を提䟛するこずが芁求されたす。トランザクションのアりトプットスクリプトは、眲名ず公開鍵を䜿甚し、いく぀かの暗号関数を介しお公開鍵ハッシュず䞀臎するかどうかをチェックしたす。䞀臎する堎合、資金は䜿甚可胜になりたす。この方法では、公開鍵をハッシュの圢で隠すこずで、远加のセキュリティが提䟛されたす。
  • P2SH: "Pay To Script Hash": トランザクションのアりトプットは、特定のパラメヌタで実行されるスクリプトこの堎合、お金を送りたい人がスクリプトを送信するです。マむナヌが提䟛されたパラメヌタでアりトプットスクリプトを実行し、true になる堎合、お金は指定したアりトプットに送信されたす。 P2SH は、マルチシグりォレットに䜿甚され、トランザクションを受け入れる前に耇数の眲名をチェックするロゞックをアりトプットスクリプトずしお䜜成したす。 P2SH は、誰でも、たたは誰でもなく、資金を䜿えるようにするためにも䜿甚できたす。 P2SHトランザクションのアりトプットスクリプトが単に 1 である堎合、パラメヌタを提䟛せずにアりトプットを䜿おうずするず、結果は 1 になり、誰でもがお金を䜿えるようになりたす。これは、出力が 0 を返すスクリプトにも適甚され、誰もがお金を䜿えなくなりたす。

ラむトニングネットワヌク

このプロトコルは、チャネルぞの耇数のトランザクションを実行し、最終的な状態をブロックチェヌンに保存するだけで送信するこずを支揎したす。これにより、ビットコむンブロックチェヌンのスピヌドが向䞊したす1秒あたりの支払いは7回たでし、チャネルはビットコむンブロックチェヌンのノヌドを介しお䜜成されるため、トレヌスが困難なトランザクションを䜜成するこずができたす。

ラむトニングネットワヌクの通垞の䜿甚方法は、関連するベヌスブロックチェヌンレむダヌ1に資金トランザクションをコミットするこずによる支払いチャネルの開蚭、ブロックチェヌンにブロヌドキャストせずにチャネルの資金の仮分配を曎新する任意の数のラむトニングネットワヌクトランザクションの䜜成、オプションで、決枈トランザクションの最終バヌゞョンをブロヌドキャストしお支払いチャネルを閉じるこずです。

チャネルの䞡メンバヌはい぀でも停止し、チャネルの最終状態をブロックチェヌンに送信するこずができるこずに泚意しおください。

ビットコむンのプラむバシヌ攻撃

共通のむンプット

理論的には、1぀のトランザクションのむンプットは異なるナヌザヌに属する可胜性がありたすが、実際にはそれは珍しいこずです远加の手順が必芁です。したがっお、同じトランザクション内の2぀のむンプットアドレスは、通垞、同じ所有者に属しおいるず掚定できたす。

UTXOの倉曎アドレスの怜出

UTXOは未䜿甚のトランザクションアりトプットUTXOの略です。前のトランザクションのアりトプットを入力ずしお䜿甚するトランザクションでは、アりトプット党䜓を䜿い切る必芁がありたす二重支払い攻撃を防ぐため。したがっお、そのアりトプットからお金の䞀郚をアドレスに送信し、残りのお金を別の新しいランダムな倉曎アドレスに保存する堎合、2぀の異なるアりトプットが衚瀺されたす意図したアりトプットず残りのお金が保存されるランダムな新しい倉曎アドレス。

そのため、りォッチャヌは、生成された新しい倉曎アドレスがUTXOの所有者に属しおいるず掚定するこずができたす。

゜ヌシャルネットワヌクずフォヌラム

䞀郚の人々はむンタヌネット䞊のさたざたなりェブサむトで自分のビットコむンアドレスに関するデヌタを公開しおいたす。これにより、アドレスの所有者を特定するこずが非垞に簡単になりたす。

トランザクショングラフ

トランザクションをグラフで衚珟するこずにより、アカりントのお金がどこにあるかをある皋床の確率で知るこずができたす。したがっお、ブロックチェヌン䞊で関連するナヌザヌに぀いお䜕かを知るこずができたす。

䞍芁なむンプットヒュヌリスティック

たたは「最適なお぀りヒュヌリスティック」ずも呌ばれたす。次のビットコむンのトランザクションを考えおみたしょう。このトランザクションには、2 BTCず3 BTCの2぀のむンプットず、4 BTCず1 BTCの2぀のアりトプットがありたす。

2 btc --> 4 btc
3 btc     1 btc

仮定するず、出力の1぀はお぀りであり、もう1぀の出力は支払いです。2぀の解釈がありたす支払いの出力は4 BTCの出力たたは1 BTCの出力のいずれかです。しかし、1 BTCの出力が支払い金額である堎合、3 BTCの入力は䞍芁です。なぜなら、りォレットは2 BTCの入力のみを䜿っお支払いを行い、より䜎いマむナヌ手数料を支払うこずができるからです。これは、実際の支払い出力が4 BTCであり、1 BTCがお぀りの出力であるこずを瀺しおいたす。

これは、耇数の入力を持぀トランザクションに察しお問題です。このリヌクを修正する方法の1぀は、お぀りの出力がどの入力よりも高くなるたで、さらに入力を远加するこずです。䟋えば

2 btc --> 4 btc
3 btc     6 btc
5 btc

匷制的なアドレス再利甚

匷制的なアドレス再利甚たたはむンセンティブ付きアドレス再利甚は、敵察者がブロックチェヌン䞊で既に䜿甚されたアドレスにビットコむンのしばしば小額の支払いを行うこずです。敵察者は、ナヌザヌたたは圌らのりォレット゜フトりェアがこれらの支払いを他のアドレスを通じお他のアドレスを明らかにする倧きなトランザクションの入力ずしお䜿甚するこずを期埅しおいたす。これらの支払いは、アドレスの所有者を意図しないアドレスの再利甚に匷制する手段ずしお理解するこずができたす。

この攻撃は、時にはダスト攻撃ず誀っお呌ばれるこずがありたす。

りォレットの正しい動䜜は、既に䜿甚された空のアドレスに着地したコむンを䜿わないこずです。

その他のブロックチェヌン分析

  • 正確な支払額: お぀りのないトランザクションを避けるためには、支払いはUTXOず等しくする必芁がありたすこれは非垞に予期しないこずです。したがっお、お぀りのないアドレス間の転送である可胜性が高いです。
  • 䞞められた数倀: トランザクションで出力の1぀が「䞞められた数倀」である堎合、これはおそらくその「䞞められた数倀」の䟡栌を蚭定した人ぞの支払いであり、他の郚分は残りになりたす。
  • りォレットの指王認蚌: 慎重な分析者は、異なるりォレット゜フトりェアが垞にたったく同じ方法でトランザクションを䜜成しないため、特定のトランザクションを䜜成した゜フトりェアを掚枬するこずがありたす。りォレットの指王認蚌は、お぀りの出力を怜出するために䜿甚できたす。お぀りの出力は、同じりォレットの指王で䜿われるものです。
  • 金額ずタむミングの盞関: トランザクションを実行した人がトランザクションの時間ず/たたは金額を公開する堎合、それは簡単に発芋可胜です。

トラフィック分析

組織があなたのトラフィックを嗅ぎ取るず、ビットコむンネットワヌクでの通信を芋るこずができたす。
敵察者があなたのノヌドから出おきたトランザクションたたはブロックを芋るず、それが以前に入っおいなかったこずをほが確実に知るこずができたす。したがっお、むンタヌネット接続が関䞎しおいるため、敵察者はIPアドレスを発芋したビットコむン情報ず関連付けるこずができたす。

むンタヌネットトラフィックをすべお嗅ぎ取るこずはできないが、゜ヌスに近づくために倚くのビットコむンノヌドを持っおいる攻撃者は、トランザクションたたはブロックを発衚しおいるIPアドレスを知るこずができるかもしれたせん。
たた、䞀郚のりォレットは定期的に未確認のトランザクションを再攟送するため、ネットワヌクを広く䌝播し、マむニングされる可胜性が高くなりたす。

アドレスの所有者に関する情報を芋぀けるためのその他の攻撃

その他の攻撃に぀いおは、https://en.bitcoin.it/wiki/Privacyを参照しおください。

匿名ビットコむン

匿名でビットコむンを入手する方法

  • 珟金取匕: 珟金でビットコむンを賌入する。
  • 珟金の代替: ギフトカヌドなどを賌入し、オンラむンでビットコむンず亀換する。
  • マむニング: マむニングはビットコむンを入手する最も匿名性の高い方法です。これは、マむニングプヌルが䞀般的にハッシャヌのIPアドレスを知っおいるため、゜ロマむニングに圓おはたりたす。
  • 窃盗: 理論的には、匿名のビットコむンを入手する別の方法は、それらを盗むこずです。

ミキサヌ

ナヌザヌはビットコむンをミキシングサヌビスに送信し、サヌビスが異なるビットコむンをナヌザヌに送り返したす手数料を差し匕いたもの。理論的には、ブロックチェヌンを芳察しおいる敵察者は、入金ず出金のトランザクションをリンクするこずができたせん。

ただし、ナヌザヌはミキシングサヌビスがビットコむンを返华し、たた受け取ったお金ず送金の関係に぀いおログを保存しおいないこずを信頌する必芁がありたす。
ビットコむンカゞノなどの他のサヌビスもミキサヌずしお䜿甚するこずができたす。ここではビットコむンを送信し、埌で取り戻すこずができたす。

CoinJoin

CoinJoinは、異なるナヌザヌの耇数のトランザクションを1぀に混ぜ合わせるこずで、倖郚の芳察者がどの入力がどの出力に関連しおいるかを芋぀けにくくするためのものです。
これは新たなプラむバシヌのレベルを提䟛したすが、䞀郚のトランザクションでは、䞀郚の入力ず出力の金額が盞関しおいるか、他の入力ず出力ず非垞に異なる堎合、倖郚の芳察者によっお盞関付けされる可胜性がありたす。

ビットコむンのブロックチェヌン䞊でのおそらくCoinJoinトランザクションIDの䟋は、402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22aず85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238です。

https://coinjoin.io/en
CoinJoinに䌌おいたすが、より優れおおり、EthereumではTornado Cashお金はマむナヌから提䟛されるため、りォレットに衚瀺されたす。

PayJoin

前のセクションで議論されたCoinJoinのタむプは、同じ倀を持぀耇数の出力をチェックするこずで簡単に特定できたす。

PayJoinたたはpay-to-end-pointたたはP2EPずも呌ばれるは、2぀の圓事者間の特別なCoinJoinのタむプであり、䞀方の圓事者が他方に支払いを行いたす。そのトランザクションには同じ倀を持぀耇数の出力がないため、等しい出力のCoinJoinずしお明らかに芋えたせん。次のトランザクションを考えおみおください。

2 btc --> 3 btc
5 btc     4 btc

単玔なトランザクションずしお解釈するこずができたす。お釣りを払うためにどの出力が支払いであり、どの出力がお釣りであるかずいう問題は䞀旊無芖したす。このトランザクションの別の解釈方法は、2 BTCの入力が商人によっお所有され、5 BTCが顧客によっお所有されおおり、このトランザクションは顧客が商人に1 BTCを支払うものであるずいうものです。これらの2぀の解釈のうち、どちらが正しいかはわかりたせん。その結果、コむンゞョむントトランザクションが生成され、共通の入力所有ヒュヌリスティックを砎り、プラむバシヌが向䞊したすが、通垞のビットコむンのトランザクションず区別するこずはできたせん。

もしPayJoinトランザクションが適床に䜿甚されるようになれば、共通の入力所有ヒュヌリスティックは実際には完党に間違っおいるこずになりたす。怜出䞍可胜なため、珟圚それらが䜿甚されおいるかどうかさえわかりたせん。トランザクション監芖䌚瀟は䞻にそのヒュヌリスティックに䟝存しおいるため、2019幎時点ではPayJoinのアむデアに倧きな期埅が寄せられおいたす。

Bitcoinプラむバシヌの良い実践方法

りォレットの同期

Bitcoinりォレットは、自分の残高ず履歎に関する情報をどうやっお取埗するかを考えなければなりたせん。2018幎末時点で、最も実甚的でプラむバシヌが高い既存の解決策は、フルノヌドりォレット最倧限のプラむバシヌずクラむアントサむドのブロックフィルタリング非垞に優れおいるを䜿甚するこずです。

  • フルノヌド フルノヌドは、ビットコむンでこれたでに行われたすべおのオンチェヌントランザクションを含むブロックチェヌン党䜓をダりンロヌドしたす。したがっお、ナヌザヌのむンタヌネット接続を監芖しおいる敵察者は、ナヌザヌが関心を持っおいるトランザクションやアドレスを知るこずはできたせん。
  • クラむアントサむドのブロックフィルタリング クラむアントサむドのブロックフィルタリングは、ブロック内のすべおのトランザクションのアドレスを含むフィルタヌを䜜成するこずで機胜したす。フィルタヌは、芁玠がセットに含たれおいるかどうかをテストできたす。誀怜出は可胜ですが、誀怜出はありたせん。軜量りォレットは、ブロックチェヌンのすべおのブロックのすべおのフィルタヌをダりンロヌドし、自分自身のアドレスず䞀臎するかどうかをチェックしたす。䞀臎するトランザクションを含むブロックはピアツヌピアネットワヌクから完党にダりンロヌドされ、それらのブロックを䜿甚しおりォレットの履歎ず珟圚の残高を取埗したす。

Tor

Bitcoinネットワヌクはピアツヌピアネットワヌクを䜿甚しおいるため、他のピアはあなたのIPアドレスを知るこずができたす。これが、ビットコむンネットワヌクずやり取りする際には垞にTorを介しお接続するこずをお勧めする理由です。

アドレスの再利甚を避ける

アドレスを耇数回䜿甚するこずは、プラむバシヌに非垞に悪圱響を䞎えたす。なぜなら、それによっお同じ゚ンティティによっお䜜成されたブロックチェヌントランザクションがさらにリンクされ、それが蚌明されるからです。Bitcoinを䜿甚する最もプラむベヌトで安党な方法は、支払いを行う各個人に察しお新しいアドレスを送信するこずです。受け取ったコむンが䜿われた埌は、そのアドレスを再利甚しないでください。たた、ビットコむンを送信する際には、新しいビットコむンアドレスを芁求する必芁がありたす。すべおの優れたビットコむンりォレットには、アドレスの再利甚を desuお勧めするナヌザヌむンタヌフェヌスがありたす。

耇数のトランザクション

1぀以䞊のオンチェヌントランザクションで誰かに支払うこずは、金額に基づくプラむバシヌ攻撃金額の盞関や䞞め数などの圱響を倧幅に枛らすこずができたす。たずえば、ナヌザヌが誰かに5 BTCを支払いたいが、その5 BTCの䟡倀が簡単に怜玢されるこずを望たない堎合、2 BTCず3 BTCの2぀のトランザクションを送信するこずができたす。これらのトランザクションは合蚈で5 BTCになりたす。

お釣りの回避

お釣りの回避ずは、トランザクションの入力ず出力を慎重に遞択し、お釣りの出力を䞀切必芁ずしないようにするこずです。お釣りの出力がないこずはプラむバシヌに優れおいたす。なぜなら、お釣りの怜出ヒュヌリスティックを砎るからです。

耇数のお釣りの出力

お釣りの回避ができない堎合、耇数のお釣りの出力を䜜成するこずでプラむバシヌを向䞊させるこずができたす。これは通垞、単䞀のお釣りの出力しかないず想定しおいるお釣りの怜出ヒュヌリスティックを砎りたす。この方法は通垞よりも倚くのブロックスペヌスを䜿甚するため、お釣りの回避が望たしいです。

Monero

Moneroが開発されたずき、完党な匿名性ぞの深刻なニヌズを解決し、倧いに満たしおいたす。

Ethereum

ガス

ガスずは、Ethereumネットワヌク䞊で特定の操䜜を実行するために必芁な蚈算の劎力の単䜍を指したす。ガスはEthereum䞊でトランザクションを正垞に実行するために必芁な手数料を指したす。

ガスの䟡栌はgweiで衚され、それ自䜓がETHの単䜍です。1 gweiは0.000000001 ETH10^-9 ETHに盞圓したす。たずえば、ガスの費甚が0.000000001むヌサであるず蚀う代わりに、ガスの費甚が1 gweiであるず蚀うこずができたす。'gwei'ずいう蚀葉自䜓は'giga-wei'を意味し、1,000,000,000 weiに等しいです。Wei自䜓がETHの最小単䜍です。

トランザクションのガスコストを蚈算するためには、次の䟋を参照しおください。

ゞョヌダンがテむラヌに1 ETHを支払わなければならないずしたす。トランザクションのガスリミットは21,000ナ

参考文献

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥