a4lg.com

libffuzzy / ffuzzy++

libffuzzyssdeep 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.42014-11-03libffuzzy-2.1.4.tar.xz223,8081a54af9212e9b8d226a3d973d49d2041HTML
(Doxygen)
libffuzzy-2.1.4.tar.gz310,179f83004c058fe91c9101e6b364b49106d
2.1.32014-10-28libffuzzy-2.1.3.tar.xz223,4084e5fc70628d663bf1e77c5b0de22900cHTML
(Doxygen)
libffuzzy-2.1.3.tar.gz309,9838aab6ff659344d652e216ed3ddb83f95
2.1.22014-10-28libffuzzy-2.1.2.tar.xz223,3765173a4fbdcddfade6ff645d2006ab386HTML
(Doxygen)
libffuzzy-2.1.2.tar.gz309,6789ad646a44157055287abd5e0210a3859
2.1.12014-10-25libffuzzy-2.1.1.tar.xz223,3041ebb28f0adb9a00a1950b6682934230fHTML
(Doxygen)
libffuzzy-2.1.1.tar.gz309,750dfab2b4453d58867ffc9fa98c3247bc8
2.12014-10-25libffuzzy-2.1.tar.xz223,304cba13569eefd9cc673329fec8a99700bHTML
(Doxygen)
libffuzzy-2.1.tar.gz309,64713ac09c69cbe6b052093f7518d924930
2.0.12014-10-25libffuzzy-2.0.1.tar.xz222,1201fdc643bcb86733484529e9630ce18c0HTML
(Doxygen)
libffuzzy-2.0.1.tar.gz308,25602e773412019fcf98b47781c9743f77a
1.1.12014-10-20libffuzzy-1.1.1.tar.xz214,860664f52dd95ee2ced8c086288c81c4e06-
libffuzzy-1.1.1.tar.gz299,23054402fd50ccf2e540ebe25bfc10130de
1.12014-10-20libffuzzy-1.1.tar.xz214,736f25ddd85075606c68afc0da0f5546736-
libffuzzy-1.1.tar.gz299,087cca40903d79d8b4f42cd5254d8a06825
1.02014-10-20libffuzzy-1.0.tar.xz214,560f3c8bfff9294fbf78a9a3da792d6a3c1-
libffuzzy-1.0.tar.gz298,873d7bd8530cce921fdf292e8fb991ee0d4

脆弱なバージョン

これらのバージョンには既知の脆弱性や問題があり、使用することは危険です。

バージョン公開日ファイル名サイズ (Bytes)MD5ドキュメント
2.02014-10-22libffuzzy-2.0.tar.xz221,808ada83fde887f7837a91edae493de11f9-
libffuzzy-2.0.tar.gz307,8349063b41fa53c73773c70af7ba0e607c4

変更履歴

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)

  • 最初のリリース