SHA-1 の Pure Go 実装

Security

概要

このリポジトリは「Pure Go implementation of SHA-1 hash algorithm (FIPS 180-4)」を目的としたプロジェクトです。Go言語だけでSHA-1アルゴリズムを実装し、仕様(FIPS 180-4)に準拠することを重視しています。品質保証のためにユニットテストが充実しており、カバレッジは100%を謳っています。さらにGitHub Actionsでのテスト自動化、CodeQLによる静的解析、GoのFuzzing機能を用いた異常系検出も組み込まれており、堅牢性と検証性が高い実装になっています。

GitHub

リポジトリの統計情報

  • スター数: 1
  • フォーク数: 0
  • ウォッチャー数: 1
  • コミット数: 4
  • ファイル数: 28
  • メインの言語: Go

主な特徴

  • 純粋なGo実装(Cやアセンブリへの依存なし)
  • FIPS 180-4 準拠のSHA-1アルゴリズム
  • 100%のテストカバレッジとCI(ユニットテスト、CodeQL、Fuzz)
  • 小さく読みやすいコードベースで学習・検証に適する

技術的なポイント

この実装はSHA-1の仕様どおり、512ビット(64バイト)ブロック単位でのメッセージ分割、ビッグエンディアンでのワード変換、パディング(0x80 + ゼロ埋め + 64ビット長フィールド)を正確に処理します。内部状態は5つの32ビットワード(a,b,c,d,e)で表現され、80ラウンドにわたる圧縮関数で更新されます。各ラウンドで用いる論理関数と定数Kは仕様に準拠し、メッセージスケジュール(16ワードから80ワードへ展開)も明示的に実装されています。

実装面の工夫としては、Goの型とスライス操作を活かした可読性優先のコード構成が見られます。パフォーマンス最重視であれば低レベル最適化(メモリレイアウトやアセンブラインライン)を行うこともありますが、本リポジトリは移植性と検証のしやすさを優先しており、純粋なGoで完結している点が特徴です。テスト群は標準的なベクトル(RFCやNISTのテストベクトル)に基づく出力検証をカバーし、境界条件(空メッセージ、ブロック境界でのパディング、長尺メッセージ)も網羅されています。

また、Fuzzingワークフローが組み込まれているため、パーサーや境界処理に潜む欠陥を自動的に探索できます。GitHub Actions上でのCodeQL解析により、一般的なコード品質問題や潜在的なセキュリティリスクの検出も行われます。これらによって、単に「動く」だけでなく「検証された」暗号実装としての信頼性が高められています。最後に、標準ライブラリのcrypto/sha1との比較では、互換性があれば置き換え可能ですが、標準実装はより最適化されていることが多いため、用途に応じて選択するのが良いでしょう。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .editorconfig: file
  • .gitattributes: file
  • .github: dir
  • .gitignore: file
  • .golangci.yml: file

…他 23 ファイル

(注:主要なGoソース、テスト、fuzz用ファイルやgo.mod等が含まれており、CIワークフロー定義も .github/workflows にあります)

まとめ

純粋Goで検証済みのSHA-1実装。学習や監査に最適。

リポジトリ情報:

READMEの抜粋:

SHA-1

Pure Go implementation of SHA-1 hash algorithm (FIPS 180-4).

Tests CodeQL Fuzz