ToolDeck

パスワード生成器

長さと文字セットをカスタマイズして強力なランダムパスワードを生成

文字数20
生成数5

パスワード生成器とは?

パスワード生成器は、ユーザーアカウント・API キー・データベース認証情報・暗号化シークレットとして使用するためのランダムな文字列を生成するツールです。人間が考えたパスワードとは異なり、生成されたパスワードは可能な文字の組み合わせ空間全体から無作為に選択されるため、辞書攻撃やパターンに基づく推測に対して高い耐性を持ちます。このツールはブラウザに組み込まれた暗号的乱数生成器を使用して、オンラインで強力なランダムパスワードを生成します。

パスワードの強度は「長さ」と「文字の多様性」という2つの要素に依存します。大文字・小文字・数字・記号を組み合わせた20文字のパスワードは、約131ビットのエントロピーを持ちます。その水準では、1秒間に1兆回の推測を行うブルートフォース攻撃でも、すべての組み合わせを試し終えるのに宇宙の年齢より長い時間が必要です。計算式はシンプルです: エントロピー = 文字数 × log2(文字セットのサイズ)。

NIST SP 800-63B などの標準規格は、検証者が上限を設けず少なくとも8文字のパスワードを推奨しており、「記号を1つ必ず含む」といった強制的な構成ルールは避け、より長いパスフレーズを優先するよう促しています。マシン間認証やサービスアカウントの認証情報には、大多数のセキュリティフレームワークおよびコンプライアンス基準において、完全な文字セットから選択した20文字以上のランダムな文字列が受け入れられる基準となっています。

パスワード生成器を使う理由

人間は優れた乱数生成器ではありません。パスワードを使い回したり、辞書に載っている単語を選んだり、文字を予測可能なパターンで置き換えたり(@ を a の代わりに、3 を e の代わりに使うなど)、短い文字列にしがちです。パスワード生成器は、このプロセスから人間のバイアスを取り除きます。

🔐
プライバシー優先の生成
パスワードはブラウザ内で Web Crypto API を使用して完全に生成されます。文字が外部に送信されることはなく、ログに記録されることもなく、生成中にネットワークリクエストは一切発生しません。
一括出力に対応
1回のクリックで最大20件のパスワードをまとめて生成できます。個別にコピーするか、すべてを一括コピーして、プロビジョニングスクリプトや認証情報のボールトに活用できます。
🛡️
アカウント不要
サインアップ不要、メールアドレス不要、生成したパスワードを追跡するクッキーも使用しません。ページを開いてオプションを設定し、そのまま生成できます。
🎛️
文字セットを完全制御
大文字・小文字・数字・記号を個別にオン/オフできます。文字数は4〜128文字の範囲で設定でき、あらゆるシステムやポリシーの要件に対応できます。

パスワード生成器の活用シーン

フロントエンド開発
フォームのバリデーション、入力文字数テスト、認証フローの開発で使うテスト用パスワードを生成できます。ログインフォームが128文字のパスワードや特殊文字を正しく処理できているか確認しましょう。
バックエンド・DevOps
インフラ構築時にデータベースの認証情報、API トークン、サービスアカウントのパスワードを作成できます。一括生成機能を使えば、1回のセッションで複数のサービスへのプロビジョニングも効率よく行えます。
セキュリティエンジニアリング
暗号化キー・HMAC 署名・JWT シークレットのローテーションに使用する高エントロピーのシークレットを生成できます。256ビット以上のエントロピーが必要なシークレットには64文字以上に設定してください。
QA・ペネトレーションテスト
特定の文字セットを含む・含まない文字列を生成して、パスワードポリシーの適用状況をテストできます。最小文字数や複雑さの要件を満たさないパスワードをシステムが正しく拒否するか検証しましょう。
データエンジニアリング
テスト環境・ステージングデータベース・CI/CD パイプラインのシークレット用にランダムな認証情報を生成できます。環境ごとに新しい認証情報を生成することで、テストデータに本番のパスワードを流用するリスクを避けられます。
個人アカウントのセキュリティ
オンラインアカウントごとに固有のパスワードを作成できます。このジェネレーターをパスワードマネージャーと組み合わせて使えば、覚えなくてよい認証情報を安全に保存できます。

パスワードエントロピーの参考値

エントロピーはパスワードの予測困難さをビット数で表したものです。log2(文字セットのサイズ ^ 文字数) で計算されます。エントロピーが高いほど、攻撃者が試すべき組み合わせが多くなります。NIST および OWASP は高セキュリティのアプリケーションには少なくとも80ビットのエントロピーを推奨しています。

文字数文字セットエントロピーブルートフォース所要時間
8lower + digits~41 bitsMinutes to hours
12lower + upper + digits~71 bitsCenturies (offline)
16all character sets~105 bitsBeyond brute-force
20all character sets~131 bitsBeyond brute-force
32all character sets~210 bitsBeyond brute-force
64all character sets~419 bitsBeyond brute-force

解読時間は最新の GPU を使ったオフライン攻撃で1秒間に1兆回の推測を想定しています。レートリミットのかかったオンライン攻撃はこれより何桁も遅くなります。

CSPRNG と Math.random() — パスワード生成における違い

乱数の生成源はパスワードの長さと同じくらい重要です。予測可能な乱数生成器で生成されたパスワードは、アルゴリズムとシードの状態を知っている攻撃者によって復元される可能性があります。このツールは crypto.getRandomValues() を使用しています。これはすべてのモダンブラウザに組み込まれた暗号的安全な疑似乱数生成器(CSPRNG)です。

crypto.getRandomValues()
オペレーティングシステムのエントロピー源(ハードウェア RNG、割り込みタイミングなど)を使用します。攻撃者がこれまでのすべての出力を知っていても、次の出力を予測できません。セキュリティに関わる処理に対して W3C Web Crypto 仕様が要求しています。
Math.random()
限られたエントロピープールからシードされた決定論的アルゴリズムを使用します。シードの状態が分かれば出力を予測できます。ECMAScript の仕様では Math.random() が暗号的に安全な乱数を提供しないことが明示されています。パスワード生成には絶対に使用しないでください。

コード例

さまざまな言語でプログラム的にパスワードを生成する例です。以下のすべての例では、Math.random() や同等の脆弱な PRNG ではなく、暗号的に安全な乱数生成源を使用しています。

JavaScript (Web Crypto API)
// Generate a random password in the browser or Node.js 19+
function generatePassword(length = 20) {
  const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*'
  const values = new Uint32Array(length)
  crypto.getRandomValues(values)
  return Array.from(values, v => charset[v % charset.length]).join('')
}

console.log(generatePassword())    // → "kR7!mZp$Xw2&nLq9@Yf3"
console.log(generatePassword(32))  // → "Hd4%tNx!Qw8#mKp2Rv6&Zj0*Ls3Yb7@"
Python
import secrets
import string

def generate_password(length: int = 20) -> str:
    """Generate a cryptographically secure random password."""
    alphabet = string.ascii_letters + string.digits + string.punctuation
    return ''.join(secrets.choice(alphabet) for _ in range(length))

# Single password
print(generate_password())      # → "kR7!mZp$Xw2&nLq9@Yf3"

# Batch of 5 passwords
for _ in range(5):
    print(generate_password(24))

# Ensure at least one char from each category
def generate_strong(length: int = 20) -> str:
    required = [
        secrets.choice(string.ascii_uppercase),
        secrets.choice(string.ascii_lowercase),
        secrets.choice(string.digits),
        secrets.choice(string.punctuation),
    ]
    remaining = length - len(required)
    alphabet = string.ascii_letters + string.digits + string.punctuation
    all_chars = required + [secrets.choice(alphabet) for _ in range(remaining)]
    secrets.SystemRandom().shuffle(all_chars)
    return ''.join(all_chars)
CLI (OpenSSL / /dev/urandom)
# OpenSSL — generate 32 random bytes, base64-encode
openssl rand -base64 32
# → "x7Kp2mNqR4wZ8vLs1Yb0Hd6tFj3Xc9Ga5eUi+Wo="

# /dev/urandom with tr — alphanumeric + symbols, 20 chars
tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c 20; echo
# → "kR7!mZp$Xw2&nLq9@Yf3"

# pwgen (install: apt install pwgen / brew install pwgen)
pwgen -sy 20 5
# Generates 5 passwords, 20 chars each, with symbols
Go
package main

import (
    "crypto/rand"
    "fmt"
    "math/big"
)

func generatePassword(length int) (string, error) {
    charset := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"
    result := make([]byte, length)
    for i := range result {
        idx, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
        if err != nil {
            return "", err
        }
        result[i] = charset[idx.Int64()]
    }
    return string(result), nil
}

func main() {
    pwd, _ := generatePassword(20)
    fmt.Println(pwd) // → "kR7!mZp$Xw2&nLq9@Yf3"
}

よくある質問

パスワードの長さはどのくらいにすべきですか?
ユーザーアカウントには、混合文字セットを使った16文字で100ビット以上のエントロピーが得られ、現在のすべての脅威モデルに対して十分です。マシンシークレット(API キー、暗号化キー)には32文字以上を使用してください。NIST SP 800-63B は最低8文字を設定していますが、システムが切り詰めることなくより長いパスワードを許可するよう推奨しています。
このパスワード生成器は安全に使えますか?
はい。パスワードはブラウザ内で Web Crypto API(crypto.getRandomValues)を使用して生成されます。データがサーバーに送信されることはありません。ブラウザのネットワークタブを開いて「生成」ボタンをクリックすると、リクエストが発生しないことで確認できます。ソースコードはクライアントサイドの JavaScript であり、ブラウザの開発者ツールから参照できます。
パスワードエントロピーとは何ですか?
エントロピーはランダム性をビット数で表した尺度です。N ビットのエントロピーを持つパスワードには 2^N 通りの値があります。たとえば、95種類の印字可能 ASCII 文字から選んだ20文字のパスワードのエントロピーは log2(95^20) = 131.1 ビットです。1ビット増えるごとに、攻撃者が必要な推測回数が2倍になります。
パスワードに記号を含めるべきですか?
記号を含めると文字セットが62文字(英字+数字)から95文字(印字可能 ASCII)に広がり、1文字あたり約6.1ビットのエントロピーが追加されます。一部のシステムでは使用できる記号が制限されています。特定の記号が拒否される場合は記号オプションを無効にして、代わりにより長いパスワードで補ってください。24文字の英数字パスワードは、記号ありの16文字パスワードよりもエントロピーが高くなります。
なぜパスワード生成に Math.random() を使ってはいけないのですか?
Math.random() は暗号的に安全ではありません。多くの JavaScript エンジンは xorshift128+ または同様の高速 PRNG を実装しており、これはセキュリティではなくシミュレーションやゲーム向けに設計されたものです。攻撃者が数回の出力を観察すると内部状態を復元でき、以降のすべての出力を予測できます。Web Crypto API はそのような予測ができないオペレーティングシステムのエントロピー源を使用しています。
生成したパスワードを API キーやトークンに使えますか?
はい。ただし、対象システムのフォーマット要件を確認してください。一部の API は任意の文字ではなく Base64 エンコードされたキーや16進数文字列を期待します。生のシークレット生成には、32文字以上で全文字セットを使用してください。Base64 キーの場合は、Base64 をパスワードの文字セットとして扱うのではなく、ランダムなバイト列を生成してから別途エンコードしてください。
パスワードはどのくらいの頻度でローテーションすべきですか?
NIST SP 800-63B(2017年、2024年更新)では、強制的な定期ローテーションはより弱いパスワード選択につながるため、ユーザーパスワードの定期的な強制ローテーションを推奨していません。侵害の証拠がある場合にのみローテーションしてください。マシンシークレットやサービスアカウントについては、組織のリスクモデルに基づいてローテーションしてください。高い権限を持つ認証情報は一般的に90日ごとのローテーションが目安とされています。