SHA-384ハッシュジェネレーター

任意のテキストからSHA-384ハッシュを生成

入力テキスト

ローカルで実行 · シークレットの貼り付けも安全

SHA-384ハッシュ

SHA-384ハッシュがここに表示されます…

SHA-384ハッシュとは何か

SHA-384は、NIST FIPS 180-4でSHA-2ファミリーの一部として定義された暗号学的ハッシュ関数です。任意の長さの入力を受け取り、固定長384ビット(48バイト)のメッセージダイジェストを生成し、通常は96桁の16進数文字列として表示されます。SHA-384は、TLS暗号スイート、デジタル証明書署名、およびSHA-256よりも高い衝突耐性マージンを必要とする政府システムで広く利用されています。

内部的には、SHA-384はSHA-512を切り詰めた変種です。SHA-512と同じ1024ビットのブロックサイズ、80回の圧縮ラウンド、64ビットワード演算を使用しますが、異なる初期ハッシュ値(第9番目から第16番目の素数から導出)で開始し、最終状態の最初の384ビットのみを出力します。この切り詰めにより、SHA-384は同一の入力に対してSHA-512とは異なるダイジェストを生成します(コアアルゴリズムは共有しているにもかかわらず)。

SHA-384は64ビットワードで動作するため、現代の64ビットプロセッサ上でSHA-256よりも高速に動作しつつ、より大きなダイジェストを提供します。これにより実用的な中間点となっています:SHA-256よりも強力(衝突耐性192ビット対128ビット)でありながら、SHA-512の128桁の16進数出力に伴うストレージオーバーヘッドもありません。SHA-384はTLS 1.3の証明書検証署名の既定ハッシュであり、NSA Suite B(現CNSA)では最高機密データに対して要求されています。

オンラインSHA-384生成ツールを使う理由

SHA-384ハッシュの生成には通常、ターミナルコマンドかコードの記述が必要です。このブラウザベースのツールを使えば、何もインストールせず、サーバーにデータを送信することなくSHA-384ダイジェストを即座に計算できます。

ブラウザで即時計算
テキストを貼り付けるだけで96桁のSHA-384ハッシュを即座に取得できます。Web Crypto APIがブラウザネイティブで計算を処理するため、外部依存は一切ありません。
🔒
プライバシー優先のハッシュ処理
入力したデータはデバイスの外に出ることはありません。すべてのハッシュ計算はWeb Crypto APIを通じてローカルで実行されます。サーバーへのリクエスト、ログ記録、データ保持は一切ありません。
📋
すぐにコピーできる出力形式
ワンクリックで小文字または大文字の16進数出力を切り替えられます。チェックサムファイル、設定ファイル、ドキュメントで使用するためにハッシュをクリップボードにコピーできます。
🔍
アカウント不要・インストール不要
Chrome、Firefox、Safari、Edgeなど、あらゆる最新ブラウザで動作します。サインアップ不要、拡張機能不要、CLIのセットアップも不要です。

SHA-384ハッシュジェネレーターの利用シーン

TLS証明書の検証
TLS 1.2および1.3は、証明書署名検証とPRF(擬似乱数関数)にSHA-384を使用しています。セキュリティ監査時に、証明書フィンガープリントを期待値と照合するためSHA-384ダイジェストを計算できます。
Subresource Integrity(SRI)
CDNから読み込むJavaScriptおよびCSSファイルのSHA-384ハッシュを生成できます。scriptタグやlinkタグのintegrity属性は、ほとんどのSRIジェネレーターでBase64エンコードされたSHA-384をデフォルトとして使用しています。
政府・コンプライアンスシステム
CNSA(旧NSA Suite B)は機密情報の保護にSHA-384を義務付けています。FIPS 180-4アルゴリズムを要求するコンプライアンスワークフローで、文書の完全性を検証するためにハッシュを生成できます。
ファイル完全性チェック
ファームウェアイメージ、ソフトウェアリリース、設定ファイルのSHA-384チェックサムを計算できます。転送前後のハッシュを比較することで、破損や改ざんを検出できます。
HMAC-SHA384による鍵導出
SHA-384はIPsecやTLSなどのプロトコルにおけるメッセージ認証のためにHMACと組み合わせて使用されます。HMAC-SHA384実装のデバッグ時に、期待されるハッシュ出力を検証するためにこのツールを活用できます。
暗号学の学習演習
SHA-2ファミリーを学ぶ学生は、同じ入力に対するSHA-384とSHA-256・SHA-512の出力を比較することで、異なる初期ベクターと切り詰めによってどのように異なるダイジェストが生成されるかを観察できます。

SHA-2ファミリーの変種比較

SHA-384は他のいくつかの変種とともにSHA-2ファミリーに属しています。以下の表では、ダイジェストサイズ、出力長、および代表的な用途においてそれぞれがどのように異なるかを示しています。

変種ダイジェスト16進数の長さバイト数主な用途
SHA-384384 bits96 hex chars48 bytesTLS 1.2/1.3, government/CNSA, certificate signatures
SHA-256256 bits64 hex chars32 bytesTLS, blockchain, code signing, JWTs, SRI
SHA-512512 bits128 hex chars64 bytesDigital signatures, HMAC with large keys
SHA-224224 bits56 hex chars28 bytesTruncated SHA-256 — rare, specific compliance
SHA-512/256256 bits64 hex chars32 bytesSHA-512 speed on 64-bit CPUs, 256-bit output

SHA-384 対 SHA-256 対 SHA-512 対 SHA-3-384

SHA-384と他のハッシュアルゴリズムの選択は、セキュリティ要件、プラットフォームの制約、および性能ニーズによって決まります。この比較では最も重要な特性を取り上げます。

特性SHA-384SHA-256SHA-512SHA-3-384
Digest size384 bits (96 hex)256 bits (64 hex)512 bits (128 hex)384 bits (96 hex)
Internal state512 bits (8x64-bit)256 bits (8x32-bit)512 bits (8x64-bit)1600 bits (sponge)
Block size1024 bits512 bits1024 bits832 bits
Rounds80648024
Word size64 bits32 bits64 bitsN/A (sponge)
Length extensionResistantVulnerableVulnerableResistant
64-bit performanceFast (native ops)Slower (32-bit ops)Fast (native ops)Moderate
StandardFIPS 180-4FIPS 180-4FIPS 180-4FIPS 202
Web Crypto APIYesYesYesNo

SHA-384の内部動作

SHA-384はSHA-512と同じMerkle–Damgård構造を通じて入力を処理します。入力は1024ビットの倍数にパディングされ、ブロックに分割され、各ブロックはCh、Maj、および2つのSigma関数を64ビットワード演算で使用した80ラウンドの混合処理を経ます。SHA-512との主な違いは初期ハッシュ値にあります:SHA-384は第9番目から第16番目の素数の平方根の小数部から導出された値を使用し、SHA-512は最初の8つの素数を使用します。すべてのブロックが処理された後、SHA-384は512ビットの内部状態をその最初の384ビットに切り詰めます。

Input: "hello world"
SHA-384: fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd
(384 bits = 48 bytes = 96 hex characters)

この切り詰めと異なる初期化により、SHA-384とSHA-512は同一の入力に対して常に異なるダイジェストを生成します。また、SHA-256やSHA-512とは異なり、SHA-384は長さ拡張攻撃に対して本質的に耐性があります。長さ拡張攻撃とは、攻撃者が元のメッセージを知らずにデータを追加して有効なハッシュを計算できる攻撃です。

SHA-384コードサンプル

SHA-384はすべての主要な言語とランタイムでネイティブにサポートされています。以下はプロジェクトに直接コピーして使用できる実例です。

JavaScript (Web Crypto API)
// Works in all modern browsers and Node.js 18+
async function sha384(text) {
  const data = new TextEncoder().encode(text)
  const hashBuffer = await crypto.subtle.digest('SHA-384', data)
  const hashArray = Array.from(new Uint8Array(hashBuffer))
  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}

await sha384('hello world')
// → "fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha384').update('hello world').digest('hex')
// → "fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd"
Python
import hashlib

# Basic SHA-384 hash
result = hashlib.sha384(b'hello world').hexdigest()
print(result)
# → "fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd"

# Hash a string with Unicode characters
text = 'café ☕'
hashlib.sha384(text.encode('utf-8')).hexdigest()
# → 96-character hex string

# Hash a file in chunks (memory-efficient)
with open('release.tar.gz', 'rb') as f:
    sha = hashlib.sha384()
    for chunk in iter(lambda: f.read(8192), b''):
        sha.update(chunk)
    print(sha.hexdigest())
Go
package main

import (
    "crypto/sha512"
    "fmt"
)

func main() {
    data := []byte("hello world")
    // SHA-384 lives in the crypto/sha512 package
    hash := sha512.Sum384(data)
    fmt.Printf("%x\n", hash)
    // → fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd
}
CLI (Linux / macOS)
# Using sha384sum (Linux)
echo -n "hello world" | sha384sum
# → fdbd8e75a67f29f701a4e040385e2e23...  -

# macOS
echo -n "hello world" | shasum -a 384
# → fdbd8e75a67f29f701a4e040385e2e23...  -

# Using openssl (cross-platform)
echo -n "hello world" | openssl dgst -sha384
# → SHA2-384(stdin)= fdbd8e75a67f29f701a4e040385e2e23986303ea...

# Verify a file checksum
sha384sum myfile.bin > checksum.txt
sha384sum -c checksum.txt
# → myfile.bin: OK

よくある質問

SHA-384とSHA-512の違いは何ですか?
SHA-384とSHA-512は同じ圧縮関数、ブロックサイズ(1024ビット)、ラウンド数(80)を使用しています。2つの点で異なります:SHA-384は異なる初期ハッシュ値(1〜8番目の素数ではなく9〜16番目の素数から導出)で開始し、512ビットの内部状態の最初の384ビットのみを出力します。これにより、同一の入力に対して常に異なるダイジェストを生成します。
SHA-384はSHA-256よりも安全ですか?
SHA-384は、ダイジェスト長の半分という誕生日攻撃の境界に基づいて、SHA-256の128ビットと比較して192ビットの衝突耐性を提供します。原像耐性については、SHA-384は384ビット対SHA-256の256ビットを提供します。実際には、現在の脅威モデルに対してはどちらも安全とみなされていますが、SHA-384は長期的なデータ保護に対してより大きな安全マージンを提供し、一部の政府標準で要求されています。
TLSはなぜSHA-512ではなくSHA-384を使用するのですか?
TLS_AES_256_GCM_SHA384などのTLS暗号スイートがSHA-384を使用するのは、ダイジェストサイズを管理可能な範囲に保ちながら十分な衝突耐性(192ビット)を提供するためです。SHA-512の128桁の16進数出力は、TLSの用途に対して比例したセキュリティ上のメリットなしにハンドシェイクメッセージや証明書チェーンにオーバーヘッドを加えます。SHA-384はAES-256が目指す192ビットのセキュリティレベルとも一致しています。
Subresource Integrity(SRI)でSHA-384はどのように使用されますか?
HTMLのSRIタグはintegrity="sha384-{base64hash}"という形式を使用して、CDNから取得したスクリプトやスタイルシートが改ざんされていないことを検証します。ブラウザはダウンロードしたファイルのSHA-384ハッシュを計算し、期待値と比較します。一致しない場合、リソースはブロックされます。SHA-384はセキュリティとダイジェストサイズのバランスが取れているため、SRIで最もよく使用されるアルゴリズムです。
SHA-384を逆算して元の入力を復元できますか?
いいえ。SHA-384は設計上、一方向関数です。384ビットの原像耐性を持っており、SHA-384ダイジェストから2^384通りのブルートフォース探索よりも速く入力を復元する既知の方法はありません。ただし、短い、または予測可能な入力(一般的なパスワードなど)は、事前計算されたレインボーテーブルや辞書攻撃を使用して見つけられる場合があります。そのため、パスワードのハッシュ化にはbcryptやArgon2などの専用アルゴリズムを使用すべきです。
SHA-384はWeb Crypto APIでサポートされていますか?
はい。すべての最新ブラウザはcrypto.subtle.digest('SHA-384', data)を通じてSHA-384を実装しています。これはこのツールが使用しているのと同じAPIです。Node.js 18以降およびDenoでも利用できます。Web Crypto APIはArrayBufferを返し、各バイトを2桁の16進数表現にマッピングすることで16進数文字列に変換します。
SHA-256の代わりにSHA-384を使用すべき場合はいつですか?
セキュリティポリシーが128ビット以上の衝突耐性を要求する場合、機密データに対するCNSA/Suite Bへの準拠が必要な場合、またはAES-256をすでに使用しており192ビットのセキュリティレベルを揃えたい場合にSHA-384を使用してください。SHA-384はネイティブの64ビットワード演算を使用するため、64ビットプロセッサではSHA-256よりも高速に動作します。ほとんどのWebアプリケーションや汎用ハッシュ処理では、SHA-256が引き続き標準的な選択肢です。