Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Axiom-protocol — Axiomの目標は、完全に匿名で、分散化された、検閲耐性のあるソーシャルメディアプラットフォームを提供することです。これを可能にするために、アーキテクチャはプロトコルとクライアントに厳密に分割されています。このリポジトリは、Ethereum Layer 2ネットワーク上のプロトコル、スマートコントラクト、および標準化されたデータ構造を定義しています。 | Kitploit
ツール/GitHubGitHub/kl4v3/axiom-protocol
認証と認可暗号化/復号化ツールID管理暗号化プライバシーソーシャルエンジニアリング
GitHubkl4v3/axiom-protocol

Axiom-protocol

Axiomの目標は、完全に匿名で、分散化された、検閲耐性のあるソーシャルメディアプラットフォームを提供することです。これを可能にするために、アーキテクチャはプロトコルとクライアントに厳密に分割されています。このリポジトリは、Ethereum Layer 2ネットワーク上のプロトコル、スマートコントラクト、および標準化されたデータ構造を定義しています。

リポジトリを見る
55ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Axiom: 分散型・検閲耐性通信プロトコル

🚀 ライブデプロイ詳細

  • ネットワーク: Arbitrum One (メインネットL2)
  • チェーンID: 42161
  • RPCエンドポイント: https://arb1.arbitrum.io/rpc (または任意のカスタムAlchemy/Infuraエンドポイント)
  • Axiomプロキシコントラクトアドレス: 0xc11CFf8111e8b1F055eba095Efb679a38Abe6b63

(注: AxiomはUUPSアップグレード可能プロキシアーキテクチャを採用しています。すべてのクライアント操作は常にこのプロキシアドレスに対して実行する必要があり、内部の実装コントラクトには決して直接アクセスしないでください。)

📖 データの読み取り方法 (インデクサー / クライアント)

クライアントは、スマートコントラクトの状態変数からプロトコルの投稿を直接読み取ろうとしてはいけません(ガス節約のため、コンテンツは状態に保存されません)。代わりに、クライアントはブロックチェーンイベントをインデックスする必要があります。

✍️ データの公開方法 (クライアントTx送信)

プロトコルにデータを公開するには、クライアントはプロキシコントラクトのpublishAxiom関数を呼び出すオンチェーントランザクションを送信する必要があります。


Axiomの目標は、完全に匿名で分散型かつ検閲耐性のあるソーシャルメディアプラットフォームを提供することです。

これを可能にするため、アーキテクチャは厳密に分割されています。基盤(プロトコル)とクライアント(ソフトウェア)です。このリポジトリはその基盤、すなわちEthereum Layer 2ネットワーク上のスマートコントラクトと標準化されたデータ構造を定義します。

プロジェクトの範囲

プロトコルはプラットフォームの基盤を確立します。

  • 標準命名規則: ペイロードがどのようにスマートコントラクトに送信され、クライアントがそれを読み取るかを定義する明確な構造。
  • 不変性: ブロックチェーンは改ざん不可能なフェイルセーフデータベースとして機能します。
  • マイクロブログに焦点: プロトコルは大量のオンチェーンデータ向けではなく、従来のマイクロブログの概念(短い投稿)を踏襲します。メディアファイルはネイティブにチェーン上に保存されず、必要に応じて外部リンク経由で埋め込みます。
  • スパム対策: トランザクション手数料と、ウォレットの初回投稿に対する低額の一回限りのエントリーフィーにより、ボットネットによる状態肥大化攻撃を防止します。
  • セキュリティルーティング: プロトコルは特定のセキュリティ要件に基づいてメッセージのOPSEC分離を強制します。

プロトコルセキュリティレベル

Axiomは、通信が制限されている国のユーザーに対して真の言論の自由を実現するように設計されています。プロトコルは3つのセキュリティレベルを区別します。ユーザーは自分の状況に適したセキュリティレベルを理解していることを前提としています。

  • レベル1: 公開 通信はブロックチェーン上で平文で公開されます。すべてのクライアントがすべてのトラフィックを読み取り、処理できます。このレベルではリンクの埋め込み(例: サードパーティプロバイダー経由の画像)が許可されます。標準的なソーシャルメディアのやり取り(面白い猫の写真など)がここで行われることが期待されます。これによりネットワーク内に重要なノイズが生成されます。純粋なIPトラッキングに関するセキュリティは低くなりますが、投稿は完全に検閲不可能です。
  • レベル2: 閉鎖 このレベルは厳格なセキュリティを目的としています。プレーンテキストメッセージのみをサポートします。プロトコルはメディアリンクを禁止し、クライアントが外部コンテンツを読み込む際のIP漏洩を技術的に完全に防止します。ユーザーは匿名でガス代に使用する暗号通貨を取得する必要があります。
  • レベル3: 暗号化 最大のプライバシーのために構築されています。メッセージ自体が送信前にAES-256-GCMで暗号化されます。メタデータ、初期化ベクトル(IV)、暗号文のみがブロックチェーンに保存されます。正しい暗号鍵を持つユーザーのクライアントのみがこれらのメッセージを復号して読むことができます。

ネットワークセキュリティとIPトラッキング(ハードルール)

すべてのレベルにおいて、オニオンルーティング(例: Tor)が厳格に必須です。商用のRPCプロバイダー(InfuraやAlchemyなど)と通信すると、送信元のIPアドレスが平文で漏洩します。反体制活動家にとって生命に関わるOPSECの脆弱性を防ぐため、クライアントはTorネットワークを介してのみRPCノードにトランザクションをルーティングする必要があります。


暗号化標準(レベル3用)

レベル3のメッセージでは、相互運用性を確保しセキュリティを損なわないために、すべてのクライアントが以下の暗号化標準を厳守する必要があります。

  1. 暗号化アルゴリズム: AES-256-GCM すべてのレベル3ペイロードは、256ビット鍵長を使用したAES-GCMモードで対称暗号化されなければなりません。初期化ベクトル(IV/Nonce)はメッセージごとにランダムに再生成され、プレーンテキストのメタデータとしてブロックチェーンに書き込まれます。これにより外部の観測者によるパターン認識を防ぎます。
  2. 鍵導出: Argon2id ユーザーはクライアントに人間が読めるパスワードを入力します。これをAES鍵として直接使用してはいけません。クライアントは厳密にArgon2idハッシュアルゴリズムを使用する必要があります。(注: 開発者はクライアント内で反復回数とメモリ使用量の固定パラメータを定義し、すべてのクライアントがまったく同じ鍵を生成するようにしなければなりません。)
  3. 鍵交換: 帯域外 Axiomはオンチェーンでの鍵交換を扱いません。プロトコルは公開鍵を保存しません。特定のチャネルのパスワード(共有秘密)の交換はユーザーの責任であり、ネットワーク外(例: 直接会って)で行わなければなりません。
  4. データ整合性 AES-GCMは認証タグを生成します。クライアントはこのタグを検証しなければなりません。検証に失敗した場合、クライアントはそのメッセージを黙って破棄(ドロップ)しなければなりません。

データ構造、ペイロード配信、インデックス作成

Axiomはハイブリッドペイロード配信(ABI分割)を利用します。スマートコントラクトに高コストなデータ形式の展開を強制しないために、データは送信前に分離されます。

  1. ロジック変数: レベル(uint8 _level)と初期化ベクトル(bytes _iv)はスマートコントラクトに直接パラメータとして渡されます。コントラクトがセキュリティルールを適用するためにこれらを必要とするためです。
  2. 不透明データ: 実際のメッセージコンテンツはクライアント内部でJSONとして構築され、CBOR(Concise Binary Object Representation) に圧縮されます。コントラクトはこのCBORパッケージを「盲目的に」処理し、直接イベントログに転送します。

ペイロードキー(CBOR構造)

Axiomはバイト節約のために単一文字をキーとして使用します。作者(msg.sender)とタイムスタンプ(block.timestamp)は省略されます。これらはスマートコントラクトが改ざん不可能な形で抽出するためです。

  • t(Type): 整数。アクションの種類。
  • c(Content): 文字列/バイト。テキスト、名前、または暗号文。
  • h(ハッシュタグ/タグ): 配列。オプション。分類(サブチャネル)に使用。
  • m(メッセージヒント): バイト(長さ2)。レベル3のみ。 ファジーバケットに使用される2バイトのHMACハッシュ。
  • r(返信先): バイト。オプション。参照先の投稿のトランザクションハッシュ。

アクションタイプ(tフィールド)

  • 0 = プロフィール更新(ウォレットアドレスをフィールドcの読み取り可能な名前にリンク)
  • 1 = 投稿(標準メッセージ)
  • 2 = 返信(rには元の投稿のハッシュが必要)
  • 3 = いいね(rには投稿のハッシュが必要)
  • 4 = いいね解除(タイプ3を取り消し)
  • 5 = リツイート/再投稿(rには投稿のハッシュが必要)
  • 6 = リツイート解除(タイプ5を取り消し)

サブチャネルとダークルーティング(hフィールド)

  • レベル1および2: タグは平文で渡されます。
  • レベル3(暗号化): タグを平文で渡すことはプロトコルレベルで厳格に禁止されています。メタデータが漏洩するためです。タグはコンテンツ(c)とまったく同様に暗号化されなければなりません。そのため、外部の観測者にはタグは完全に見えません(ダークルーティング)。

レベル3: ファジーバケット(mフィールド)

レベル3ではタグが暗号化されるため、クライアントは理論上すべてのメッセージを復号しようと試みる必要があります(トライアル復号)。CPU負荷を防ぐため、Axiomはメッセージヒントを使用します。

  • 送信者はHMAC-SHA256(AES_Key, IV)を計算し、最初の2バイトをmフィールドとしてCBORペイロードに配置します。
  • 受信者はローカルに保存されたパスワードに対してこのヒントを計算します。一致があった場合にのみ、高コストな復号処理が実行されます。これによりメタデータを漏洩させることなく、無関係なトラフィックの99.99%をフィルタリングします。

アイデンティティ: グローバルプロフィールとプライベートエイリアス

Axiomはアイデンティティを完全に透過的に扱います。L2ウォレットアドレス(msg.sender)が唯一のソーシャルかつ金融上のアイデンティティです。 プロトコルは金融上のOPSECの責任を完全にユーザーに委ねます(例: ミキサーやブリッジを使用して匿名でガストークンを調達すること)。

プロフィール更新アクション(t: 0)は、選択されたセキュリティレベルによって異なる動作をします。

  1. グローバルアイデンティティ(レベル1および2) ウォレットが暗号化されていないプロフィール更新を送信した場合、それはグローバル宣言として機能します。そのウォレットはネットワーク全体でこの名前で知られるようになります。誰もがこの名前を見ることができます(例: @Dissident99として公開の評判を築く)。
  2. プライベートエイリアスとニックネーム(レベル3) ウォレットが暗号化されたレベル3ペイロード内でプロフィール更新を送信した場合、それは隔離されたプライベートエイリアスを作成します。このエイリアスは、パスワードを知るユーザーだけが復号されたサブチャネル内で見ることができます。これにより、グローバルアイデンティティを変更することなく、クローズドグループ内で仮名の役割分担が可能になります。レンダリング優先順位: レベル3の場合、フロントエンドは常にローカルエイリアスが存在するかを最初に確認し、存在しない場合にのみグローバル名にフォールバックする必要があります。

スマートコントラクトアーキテクチャとOPSEC強制

AxiomはO(1)複雑性のオンチェーン検証に依存します。ガスコストを最小限に抑えるため、スマートコントラクトは基本的な暗号チェックのみを実行します。リソース集約的なコンテンツ検証はすべてクライアント(レイヤー2)にオフロードされます。

1. オンチェーン検証(スマートコントラクト)

コントラクトは改ざん不可能な用心棒として機能します。ペイロードが厳格なルールに従わない場合、トランザクションはリバートされます。

root@kitploit:~
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";

contract Axiom is Initializable, UUPSUpgradeable, OwnableUpgradeable {
    uint256 public entryFee;
    mapping(address => uint8) public walletPath; // 0=New, 1=PathA(Level1), 2=PathB(Level2/3)

    event AxiomPost(address indexed sender, uint8 level, bytes iv, bytes cbor, uint256 timestamp);

    /// @custom:oz-upgrades-unsafe-allow constructor
    constructor() {
        _disableInitializers();
    }

    function initialize() initializer public {
        __Ownable_init(msg.sender);
        entryFee = 0.0001 ether;
    }

    function _authorizeUpgrade(address newImplementation) internal override onlyOwner {}

    function publishAxiom(
        uint8 _level,
        bytes calldata _iv,
        bytes calldata _cbor
    ) external payable {
        require(_level >= 1 && _level <= 3, "Invalid level");

        uint8 requiredPath = (_level == 1) ? 1 : 2;
        uint8 currentPath = walletPath[msg.sender];

        if (currentPath == 0) {
            require(msg.value >= entryFee, "Anti-Sybil: Insufficient entry fee");
            walletPath[msg.sender] = requiredPath;
        } else {
            require(msg.value == 0, "Fee already paid");
            require(currentPath == requiredPath, "OPSEC Violation: Wallet is tainted");
        }

        if (_level == 3) {
            require(_iv.length == 12, "Level 3 strictly requires a 12-byte IV");
        } else {
            require(_iv.length == 0, "Level 1 and 2 require strictly empty IV");
        }

        emit AxiomPost(msg.sender, _level, _iv, _cbor, block.timestamp);
    }

    function withdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
}
  • 双方向ウォレット汚染(強制分離): ウォレットが初めてレベル1に投稿した場合、そのウォレットはレベル2/3に対して恒久的にブロックされます。最初にレベル2または3に投稿した場合、レベル1がブロックされます。
  • 必須パラメータ: レベル3の場合、コントラクトは12バイトのIVを厳格に強制します。

2. オフチェーン検証(クライアントによる)

投稿がプロトコルルールに違反している場合、クライアントはそのメッセージを黙って破棄しなければなりません(ローカルドロップ)。

  • レベル2リンクブロッカー: クライアントはレベル2メッセージのプレーンテキスト(c)をスキャンします。URL、IPアドレス、典型的なメディアタグが検出された場合、その投稿は完全にブロックされます。
  • 自己洗浄: 攻撃者がレベル2にリンクをスパムしたとしても、ガス代を支払うことになりますが、有効なAxiomクライアントがそれらのメッセージをレンダリングすることは決してありません。

インフラストラクチャと推奨クライアントアーキテクチャ

AxiomはEthereum Layer 2(L2)ネットワーク(例: Arbitrum Nova)にデプロイされています。

モバイルデバイス(バッテリー寿命、ストレージ制限、Argon2idのWebAssembly制限など)への負荷を避けるため、Axiomは高性能なクライアントアーキテクチャを強制します。

  • Axiom Core(自己ホスト型ノード): RPC経由でブロックチェーンを読み取り、イベントをインデックスし、リソース集約型の暗号処理をネイティブに実行するサーバー/Dockerコンテナ(例: NAS上で実行)。
  • Axiom UI(シンクライアント): 自身のAxiom CoreとAPI経由でのみ通信するモバイルアプリまたはWeb UI。

データ取得とEIP-4444

クライアントはブロックチェーン全体の状態をダウンロードしません。スマートコントラクトのAxiomPostイベントをフィルタリングし、そこに含まれるすべての必要なデータ(Sender, Level, IV, CBOR, Timestamp)をプレーンテキストで取得します。

EthereumノードはEIP-4444に従い、過去のデータ(365日より古いイベント)を最終的に破棄するため、プロトコルはローカルのAxiom Coreがデータベースを永久に保存する分散アーカイブとして機能することを推奨します。


実例ワークフロー: レベル3の投稿

アーキテクチャが実際にどのように動作するかを示すために、完全なライフサイクルを説明します。

シナリオ: Aliceがサブチャネル「AxiomDev」にメッセージ「Meeting at 8 PM」を投稿したいと考えています。グループは事前にオフラインでパスワード「Secret123」に合意しています。

ステップ1: ローカルでの準備と暗号化(Axiom Core)

AliceのAxiom Coreが計算負荷の高い処理を担当します。

  1. 鍵導出: Argon2idを使用してパスワードを256ビットのAES鍵に変換します。
  2. IV生成: ランダムな12バイトの初期化ベクトルが生成されます(例: 0x12ab34cd56ef789012ab34cd)。
  3. 暗号化: コンテンツとタグ(「AxiomDev」)がAES-GCMを使用して暗号化されます。
  4. ヒント生成: ファジーバケットのための2バイトのHMACハッシュが計算されます(m: "0xa1b2")。

ステップ2: ペイロード構築(CBORシリアライズ)

レベルとIVはコントラクトに直接渡されるため、CBORオブジェクトからは除外されます。

内部JSON表現:

root@kitploit:~
{
  "t": 1,
  "c": "0x8a4f...",
  "h": ["0x9b5e..."],
  "m": "0xa1b2"
}

このJSONは、ガス節約のために生のCBORバイト配列(0xa3617401...)に圧縮されます。

ステップ3: スマートコントラクト呼び出し(ブロックチェーンとの対話)

Aliceがコントラクト関数をトリガーします。重要: 呼び出しは厳密にTor経由でルーティングされます!

(L3とL1の例:)

root@kitploit:~
// 例1: 暗号化されたレベル3投稿のためのコントラクト呼び出し
await axiomContract.publishAxiom(
    3,                                      // _level: 3
    "0x12ab34cd56ef789012ab34cd",           // _iv: 12バイトの16進文字列が必要
    "0xa3617401616358208a4f..."             // _cbor: パックされたCBORの16進文字列
);

// 例2: 公開レベル1投稿のためのコントラクト呼び出し
await axiomContract.publishAxiom(
    1,                                      // _level: 1
    "0x",                                   // _iv: 厳密に空のバイト配列
    "0xa361740161634c48656c6c6f204178..."   // _cbor: パックされたCBORの16進文字列
);

スマートコントラクトは次のイベントを発行します。

Event: AxiomPost(Sender: 0xAlice..., Level: 3, IV: 0x12ab..., CBOR: 0xa361..., Timestamp: 1710425890)

ステップ4: インデックス作成とトライアル復号(受信者)

BobのAxiom Coreがブロックチェーンをリッスンし、イベントを受信します。

  1. ローカルストレージと認識: イベントはローカルデータベースに書き込まれます。CoreはLevel 3を検出し、CBORを展開してコンテンツ、タグ、およびヒントmにアクセスします。
  2. トライアル復号: Coreは2バイトのヒントmをBobの保存されたパスワードと照合します。
  3. 一致と転送: ヒントが「Secret123」と一致します。GCMタグによりペイロードが改ざんされていないことが確認されます。データはRAM上で復号され、ローカルAPIを介してBobのスマートフォンに送信されます。「Meeting at 8 PM」というメッセージが「#AxiomDev」フィードに表示されます。
  4. 不明バックログ: 正しいパスワードを持たないユーザーにとって、ヒントチェックは失敗します。この読み取り不可能なデータノイズは、ローリングバッファの期限切れ(例: 30日)後に自動的に削除されます。
ツールをダウンロード