libffuzzy / ffuzzy++
libffuzzy は ssdeep 2.10 と互換性のある、fuzzy hash 比較ライブラリです。
このライブラリは高速でスレッドセーフであることを目標に開発されました。動的なメモリ確保も行わないため、並列計算時のパフォーマンスが向上しています。実装を行ったもうひとつの理由は、ssdeep の実装問題を洗い出すことです。私はこのライブラリのための再実装時、ssdeep の安定性と移植性に関わる問題を幾つか発見しています。
このライブラリのソースコードは GitHub で公開、管理されています。
ffuzzy++ は libffuzzy の新バージョンにおける叩き台として作られた C++ 実装です。ffuzzy++ は libffuzzy よりもなお速く、また ssdeep ダイジェストを生成する機能を備えています。
詳細は GitHub をご覧ください。
libffuzzy
使用方法
libffuzzy のグローバル関数は ffuzzy_SOMETHING のように命名されています。ffuzzy_compare
は libfuzzy の fuzzy_compare
と非常に類似したインターフェースを持っています。libffuzzy ではパース後の ssdeep ダイジェストをそのまま保持することができます。ffuzzy_read_digest
関数を用いてダイジェストをパースし、ffuzzy_compare_digest
を用いてパース後のダイジェスト同士を比較します。
Version 2.1 で非正規化フォーマット (unnormalized form) が使用できるようになりました。ffuzzy_udigest
構造体は ssdeep の出力するハッシュ値を (ファイル名部分を除いて) できるだけそのまま保つためのフォーマットであり、ffuzzy_digest
に容易に変換することができます。
パフォーマンス
Version 1.1 で予定していたパフォーマンスを達成し、1.1.1 ではさらに高速となりました。加えて Version 2.0 においては特殊化された比較・クラスタ用のインタフェースが追加されたため、これを正しく使用したクラスタリングアプリケーションは高速になります。libffuzzy はほとんどのケースにおいて libfuzzy 2.11 より高速で、Version 2.0 における 10 万ハッシュのクラスタリングではおおよそ 60% 高速となりました。
移植性
libffuzzy は、純粋な C99 のみで記述されています。環境によって定義されていないこともある型も使用していないため、どんな環境でも安心して利用することができるでしょう。
ダウンロード
libffuzzy はフリーソフトウェアです。利用者は Free Software Foundation が発行する GNU General Public License のうち version 2 または (利用者の選択において) 以降のバージョンに基づき、改変、再頒布を行うことができます。完全なクレジット (著作権とライセンス) については、各アーカイブの COPYING ファイルを参照してください。
バージョン | 公開日 | ファイル名 | サイズ (Bytes) | MD5 | ドキュメント |
2.1.4 | 2014-11-03 | libffuzzy-2.1.4.tar.xz | 223,808 | 1a54af9212e9b8d226a3d973d49d2041 | HTML (Doxygen) |
libffuzzy-2.1.4.tar.gz | 310,179 | f83004c058fe91c9101e6b364b49106d | |||
2.1.3 | 2014-10-28 | libffuzzy-2.1.3.tar.xz | 223,408 | 4e5fc70628d663bf1e77c5b0de22900c | HTML (Doxygen) |
libffuzzy-2.1.3.tar.gz | 309,983 | 8aab6ff659344d652e216ed3ddb83f95 | |||
2.1.2 | 2014-10-28 | libffuzzy-2.1.2.tar.xz | 223,376 | 5173a4fbdcddfade6ff645d2006ab386 | HTML (Doxygen) |
libffuzzy-2.1.2.tar.gz | 309,678 | 9ad646a44157055287abd5e0210a3859 | |||
2.1.1 | 2014-10-25 | libffuzzy-2.1.1.tar.xz | 223,304 | 1ebb28f0adb9a00a1950b6682934230f | HTML (Doxygen) |
libffuzzy-2.1.1.tar.gz | 309,750 | dfab2b4453d58867ffc9fa98c3247bc8 | |||
2.1 | 2014-10-25 | libffuzzy-2.1.tar.xz | 223,304 | cba13569eefd9cc673329fec8a99700b | HTML (Doxygen) |
libffuzzy-2.1.tar.gz | 309,647 | 13ac09c69cbe6b052093f7518d924930 | |||
2.0.1 | 2014-10-25 | libffuzzy-2.0.1.tar.xz | 222,120 | 1fdc643bcb86733484529e9630ce18c0 | HTML (Doxygen) |
libffuzzy-2.0.1.tar.gz | 308,256 | 02e773412019fcf98b47781c9743f77a | |||
1.1.1 | 2014-10-20 | libffuzzy-1.1.1.tar.xz | 214,860 | 664f52dd95ee2ced8c086288c81c4e06 | - |
libffuzzy-1.1.1.tar.gz | 299,230 | 54402fd50ccf2e540ebe25bfc10130de | |||
1.1 | 2014-10-20 | libffuzzy-1.1.tar.xz | 214,736 | f25ddd85075606c68afc0da0f5546736 | - |
libffuzzy-1.1.tar.gz | 299,087 | cca40903d79d8b4f42cd5254d8a06825 | |||
1.0 | 2014-10-20 | libffuzzy-1.0.tar.xz | 214,560 | f3c8bfff9294fbf78a9a3da792d6a3c1 | - |
libffuzzy-1.0.tar.gz | 298,873 | d7bd8530cce921fdf292e8fb991ee0d4 |
脆弱なバージョン
これらのバージョンには既知の脆弱性や問題があり、使用することは危険です。
バージョン | 公開日 | ファイル名 | サイズ (Bytes) | MD5 | ドキュメント |
2.0 | 2014-10-22 | libffuzzy-2.0.tar.xz | 221,808 | ada83fde887f7837a91edae493de11f9 | - |
libffuzzy-2.0.tar.gz | 307,834 | 9063b41fa53c73773c70af7ba0e607c4 |
変更履歴
Version 2.1.4 (2014-11-03)
- ssdeep のオリジナルバージョンにあるブロックサイズの上限を適用、追加
Version 2.1.3 (2014-10-28)
- git リポジトリからの直接ビルドを可能にするブートストラップスクリプトを追加
Version 2.1.2 (2014-10-28)
- libffuzzy はこのバージョンにおいて全ての unsigned long 値を有効な block size として取り扱う
- ブロックサイズのキャッピングを最適化
- ドキュメントと実装に齟齬のある箇所において、実装を修正
Version 2.1.1 (2014-10-25)
- 冗長なデバッグコードの削除
Version 2.1 (2014-10-25)
- 非正規化フォーマットの fuzzy hash を扱うためのインターフェースを追加
Version 2.0.1 (2014-10-25)
- 将来の拡張のため内部インターフェースを変更
ffuzzy_pretty_digest
関数内で起こるバッファーオーバーフロー脆弱性を修正
Version 2.0 (2014-10-22)
- コード全体を最適化 (まだまだもっと)
- 特殊化された比較・クラスタリング・変更用インターフェースを追加
- 算術オーバーフローが発生しないよう、パーサーを修正
- デバッグ・アサーションコードを追加
- ドキュメントの各種修正
- Doxygen のためのドキュメント追加
Version 1.1.1 (2014-10-20)
- 編集距離コードを最適化
- Version 1.1 の変更履歴を追加
Version 1.1 (2014-10-20)
- パース後の ssdeep ダイジェストを格納する
ffuzzy_digest
構造体を追加 - ダイジェストパースと編集距離コードを最適化
- ssdeep との互換性を向上
Version 1.0 (2014-10-20)
- 最初のリリース