Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Concryptor — ギガバイト毎秒のマルチスレッドファイル暗号エンジン。ロックフリーでトリプルバッファリングされたio_uringパイプライン、Rayonの並列チャンク処理、ハードウェアアクセラレーションAEAD(AES-256-GCM / ChaCha20)を使用して極限のスループットを実現。 | Kitploit
ツール/GitHubGitHub/frogsnot/concryptor
汎用ユーティリティ暗号化/復号化ツールデータ復旧暗号化ユーティリティとフレームワーク
GitHubfrogsnot/concryptor

Concryptor

ギガバイト毎秒のマルチスレッドファイル暗号エンジン。ロックフリーでトリプルバッファリングされたio_uringパイプライン、Rayonの並列チャンク処理、ハードウェアアクセラレーションAEAD(AES-256-GCM / ChaCha20)を使用して極限のスループットを実現。

リポジトリを見る
743172ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

Concryptor

Crates.io License: AGPL v3

Rustで構築されたマルチスレッドAEAD暗号化エンジンです。トリプルバッファリングされたio_uringパイプライン、Rayonによる並列チャンク処理、ringによるアセンブリ最適化暗号を利用して、ギガバイト/秒のスループットでファイルを暗号化・復号します。

⚠️ 免責事項:実験的ソフトウェア ⚠️

このプロジェクトは非常に新しく、現在、本番環境やミッションクリティカルな使用には推奨されていません。 暗号プリミティブ(ringによるAES-256-GCM、ChaCha20-Poly1305)と形式設計は妥当ですが、コードベースは正式なセキュリティ監査や広範な実世界テストを受けていません。自己責任で使用してください。機密データを保護するには、このプロジェクトが成熟するまでGnuPG、age、OpenSSLなどの実績のあるツールを使用することを検討してください。

特徴

  • デュアル暗号サポート: ringによるAES-256-GCM(ハードウェアAES-NI)およびChaCha20-Poly1305(アセンブリ最適化)
  • 並列暗号化: Rayonベースのマルチスレッドチャンク処理で全CPUコアを活用
  • トリプルバッファリングio_uringパイプライン: 3つの回転バッファプールを使用してカーネルI/OとCPU側の暗号処理をオーバーラップ — あるバッチの書き込みが進行中に、次のバッチがRayonによって暗号化され、3番目のバッチの読み取りがカーネルに送信されています。チャンクごとのsyscallオーバーヘッドなし、mmapの制限なし(SIGBUSなし、仮想アドレス空間の枯渇なし)
  • Argon2id鍵導出: 業界標準のパスワードストレッチング(デフォルト256 MiBメモリ、3反復、--memoryで設定可能)
  • 自己記述型KDFパラメータ: メモリコスト、反復回数、並列度が暗号化ファイルのヘッダーに保存されるため、復号時には暗号化時に選択されたパラメータが正確に使用されます。レガシーファイル(全ゼロのセンチネル)は、古い64 MiBデフォルトで透過的に処理されます。
  • チャンクインデックス付きnonce: TLS 1.3スタイルのXOR nonce導出により、チャンクの並べ替え攻撃を防止
  • ヘッダー認証付きAAD: 完全な4 KiBアライメントヘッダーがすべてのチャンクのAADに含まれており、すべてのヘッダーフィールド(コア、KDFパラメータ、予約バイト)を認証し、切り詰め、ヘッダーフィールドの改ざん、予約バイトの密輸攻撃を防止します。
  • STREAMスタイルの最終チャンク: AAD内の最終チャンクフラグにより、切り詰め攻撃と追加攻撃を防止(STREAM構成に着想を得ています)
  • ファイルごとの新鮮なランダム性: 暗号化ごとに暗号学的にランダムな16バイトのソルトと12バイトのベースnonceを生成し、ヘッダーに保存します。
  • インプレース暗号化: ringによるseal_in_place_separate_tag / open_in_placeを使用し、ホットループでのアロケーションを最小化
  • パスワードゼロ化: 鍵とパスワードは使用後にメモリから安全に消去されます。
  • O_DIRECT + セクターアライメント形式: 4 KiBアライメントのヘッダーとチャンクスロットにより、O_DIRECT I/Oを有効にし、NVMe上でDMA速度の読み取り/書き込みのためにカーネルページキャッシュをバイパスします。バッファプールは4096バイトアライメントでstd::allocを使用します。
  • ディレクトリ暗号化: 単一の暗号化アーカイブとしてディレクトリ全体を暗号化します。tarベースのパッキングにより、ファイル名、パーミッション、タイムスタンプ、ディレクトリ構造が暗号文内に保存されます。抽出時にはパストラバーサルおよびシンボリックリンクエスケープ攻撃に対して検証します。
  • 自己記述型ファイル形式: ヘッダーには、暗号、チャンクサイズ、元のファイルサイズ、ソルト、ベースnonce、Argon2id KDFパラメータが保存されます。

パフォーマンス

cargo bench(Criterion、測定ごとに10サンプル)でベンチマーク。鍵導出は除外 — 数値は純粋な暗号スループットのみを示します。

ハードウェア:

  • CPU: AMD Ryzen 5 5600X(6c/12t @ 3.7 GHz ベース)
  • RAM: 2x 8 GiB DDR4-2666(デュアルチャネル、合計16 GiB)
  • OS: Linux

I/Oに関する注記: Criterionは一時ファイルを/tmpに書き込みます。このシステムではtmpfs(RAMバッキング)です。O_DIRECTを使用する場合、カーネルはtmpfs上で実際の非同期DMAを使用できないため、これらの数値はDMAバイパスの利点なしでの暗号スループットとio_uringオーバーヘッドを反映しています。実際のGen4 NVMeドライブでは、O_DIRECTはページキャッシュのダブルバッファリングを排除し、アラインされたバッファプールへのDMAを可能にするため、大幅に高いスループットが期待できます。

ファイルサイズAES-256-GCM 暗号化ChaCha20 暗号化AES-256-GCM 復号ChaCha20 復号
64 KiB244 MiB/s233 MiB/s233 MiB/s234 MiB/s
1 MiB1.08 GiB/s882 MiB/s1010 MiB/s876 MiB/s
16 MiB1.10 GiB/s923 MiB/s1.06 GiB/s988 MiB/s
64 MiB984 MiB/s935 MiB/s988 MiB/s973 MiB/s
256 MiB1.00 GiB/s1015 MiB/s1.01 GiB/s1.02 GiB/s

チャンクサイズスイープ(AES-256-GCM、64 MiBファイル):

チャンクサイズスループット
64 KiB1.01 GiB/s
256 KiB1.05 GiB/s
1 MiB1.07 GiB/s
4 MiB988 MiB/s
8 MiB988 MiB/s
16 MiB1.00 GiB/s

パフォーマンス特性

このエンジンは、暗号操作にring(アセンブリ最適化AES-NI / NEON / ARMv8-CE)を使用し、I/Oにトリプルバッファリングされたio_uringパイプラインを使用します。3つの事前割り当てバッファプールがパイプラインを循環します。プールAの書き込みがカーネルで完了している間に、プールBはCPU上でRayonによって暗号化され、プールCの読み取りがカーネルに送信されます。これにより、I/Oレイテンシと暗号計算がオーバーラップします。

なぜAES-256-GCMが小さいファイルでChaCha20-Poly1305より速いのか: ringのAES-GCMバックエンドは、x86-64で利用可能なAES-NI + CLMULハードウェア命令を活用するため、ChaCha20(ソフトウェア暗号)よりもハードウェア上の利点があります。大きいサイズでは両方の暗号が約1.0 GiB/sに収束し、ボトルネックが暗号スループットからI/O送信オーバーヘッドに移行することを示しています。

なぜピークスループットが256 MiBではなく1〜16 MiBなのか: 小さいファイル(1〜16 MiB)はチャンク数が少ないため、Rayonの並列性が効率的で、ワーキングセットがキャッシュに収まります。64〜256 MiBでは、io_uringパイプラインが完全にアクティブ(3つのバッチが進行中)ですが、SQEあたりの送信およびCQE完了オーバーヘッドはチャンク数に比例して増加します。トリプルバッファ設計によりI/Oと暗号処理がオーバーラップし、このコストを部分的に隠蔽します。

なぜ約1.0 GiB/sであり、10+ GiB/sではないのか: 最新のAES-NIはコアあたり2〜4 GiB/sを実現できます。12スレッドでは、生の暗号スループットは10 GiB/sを超える可能性があります。ギャップを説明する3つの要因:

  1. io_uringのSQEあたりのオーバーヘッド: 各チャンクには読み取りSQEと書き込みSQEが必要です。256 MiBファイルの256チャンクでは、512個のSQEが送信され、512個のCQEが回収されます。io_uringはpread/pwriteのsyscallあたりのカーネル遷移コストを回避しますが、SQEあたりのリングバッファおよびメモリバリアオーバーヘッドは依然として存在します。
  2. パイプライン深度: PIPELINE_DEPTH=3では、一度に3つのバッチのみがパイプラインを循環します。真の定常状態オーバーラップには少なくとも3つのバッチが必要です。1つまたは2つのバッチに収まるファイルは、パイプライン化の恩恵を受けません。
  3. キャッシュ階層の影響: 5600Xはコアあたり512 KiBのL2と32 MiBの共有L3を搭載しています。デフォルトの4 MiBチャンクはL2を超え、約21チャンクのバッチ(84 MiBのアクティブワーキングセット)はL3を大幅に超えます。より小さいチャンクサイズ(64〜256 KiB)は、チャンクスイープでより良いスループットを示します。これは、ワーキングセットの多くがキャッシュに留まるためです。

バッファのライフサイクルと安全性: バッファプールは、io_uringリングが作成される前にstd::alloc::alloc_zeroedとLayout::from_size_align(size, 4096)を使用して一度だけ割り当てられ、すべてのパイプライン反復で再利用され、再割り当ては行われません。各暗号化チャンクは、O_DIRECT書き込みの前にセクターアライメントにゼロパディングされます。リングはバッファプールの前に明示的にドロップされ、カーネルが解放されたメモリを参照しないようにします(UAFなし)。

インストール

git clone https://github.com/frogsnot/concryptor.git
cd concryptor
cargo build --release

バイナリはtarget/release/concryptorにあります。

使用方法

暗号化

# AES-256-GCM(デフォルト)、出力先 myfile.dat.enc
concryptor encrypt myfile.dat

# ChaCha20-Poly1305、カスタム出力パス
concryptor encrypt myfile.dat --cipher chacha -o encrypted.enc

# カスタムチャンクサイズ(MiB単位)
concryptor encrypt largefile.iso --chunk-size 8

# より強力なKDF(512 MiBメモリコスト)
concryptor encrypt secrets.tar --memory 512

# 非対話型(パスワードプロンプトをスキップ)
concryptor encrypt myfile.dat -p "password"

セキュリティノート: --password / -p はパスワードをCLI引数として渡します。これはpsの出力やシェル履歴に表示されます。対話的に使用する場合は省略して、安全な非表示プロンプトを利用してください。スクリプトで使用する場合は、履歴を後で消去するか、ファイルディスクリプタから読み取るラッパーを使用することを推奨します。

ディレクトリの暗号化

# ディレクトリを暗号化(自動検出、mydir.tar.enc を生成)
concryptor encrypt mydir/

# カスタム暗号と出力
concryptor encrypt mydir/ --cipher chacha -o secrets.enc

ディレクトリ暗号化は、一時的なtarアーカイブ(.concryptor-*.tar、0600パーミッション、CSPRNG命名)を作成し、それを暗号化してから一時ファイルを自動削除します。ファイル名、ディレクトリ構造、パーミッション、タイムスタンプはすべて暗号化ペイロード内に含まれます。

復号

# .enc 拡張子を自動除去
concryptor decrypt myfile.dat.enc

# カスタム出力パス
concryptor decrypt encrypted.enc -o restored.dat

# 非対話型
concryptor decrypt myfile.dat.enc -p "password"

ディレクトリの復号と展開

# 復号と展開を1ステップで実行(.tar.enc を自動除去 -> ディレクトリ名)
concryptor decrypt mydir.tar.enc --extract

# 短いフラグ、カスタム出力ディレクトリ
concryptor decrypt mydir.tar.enc -x -o restored_dir/

--extract を指定しない場合、ディレクトリアーカイブの復号は中間的な .tar ファイルを生成します。これは手動で検査したり展開したりできます。

ヘルプ

concryptor --help
concryptor encrypt --help
concryptor decrypt --help

ファイル形式

すべての値はリトルエンディアンです。ヘッダーは完全な4 KiBセクターを占有し、各暗号化チャンクスロットは次の4 KiB境界にパディングされます。これにより、すべてのオフセットとI/OサイズがO_DIRECT用にセクターアライメントされます。

オフセット  サイズ  フィールド
------  -----  ---------------------
0       10     マジックバイト "CONCRYPTOR"
10       1     形式バージョン (4)
11       1     暗号タイプ (0 = AES-256-GCM, 1 = ChaCha20-Poly1305)
12       4     チャンクサイズ (バイト、LE)
16       8     元のファイルサイズ (バイト、LE)
24      16     Argon2 ソルト (暗号学的ランダム、ファイルごとに一意)
40      12     ベースノンス (暗号学的ランダム、ファイルごとに一意)
52       4     Argon2 m_cost (KiB単位、LE、0 = レガシー64 MiB)
56       4     Argon2 t_cost / 反復回数 (LE、0 = レガシー3)
60       4     Argon2 p_cost / 並列度 (LE、0 = レガシー4)
64    4032     予約 (4096バイトになるまでゼロパディング)
4096    ...     [チャンク0: 暗号文 + 16バイトタグ + セクター境界までのゼロパディング]
               [チャンク1: 暗号文 + 16バイトタグ + セクター境界までのゼロパディング]
               ...

4 MiBチャンクの場合: 各ディスクスロットは ceil((4194304 + 16) / 4096) * 4096 = 4198400 バイト(チャンクあたり4080バイトのパディング)です。ヘッダー内の4032バイトの予約領域は、将来の機能(非対称鍵スロット、メタデータなど)に使用できます。

ソルトとベースノンスは、暗号化ごとにrand::rng()(OSのCSPRNGにバッキング)から新たに生成されます。異なるソルトは異なるArgon2id鍵を生成し、異なるベースノンスは異なるチャンクごとのノンスを生成するため、パスワードをファイル間で再利用しても安全です。

セキュリティ設計

ツールをダウンロード