OS別:すぐ使えるパスワード生成方法
- macOS / Linux:
openssl rand -hex 16で128ビットの乱数を32桁の16進数として出力 - Windows:PowerShell 7の
RandomNumberGenerator.GetInt32で許可する文字集合から選択 - ブラウザ:コマンドが使えない場合は文字種を指定できるパスワード生成ツールを使用
Chromeの新規登録画面で生成候補が出ない場合は、パスワード自動生成が表示されない時の確認手順で、ブラウザ設定とサイト側の入力欄を切り分けてください。
生成値をコマンド引数、CIログ、共有クリップボードに残さないでください。ダミーのAPIキー風文字列は開発用ランダム文字列生成で作れますが、本番のトークンは利用先のサービスで発行・失効します。
Linux / Macのパスワード生成コマンド
OpenSSLで16バイト(128ビット)の乱数を、シェルで扱いやすい32桁の16進数として出力する例です。
openssl rand -hex 16
Base64が必要なら openssl rand -base64 18 で24文字を得られますが、出力には + や / が含まれる場合があります。設定ファイルやURLに埋め込むときは引用・エスケープ規則を確認してください。
/dev/urandom | tr | head の短い例も見かけますが、終了時のパイプエラー、文字の除外方法、環境差を説明しにくいため、秘密情報の標準手順にはOpenSSLなど意図が明確なAPIを推奨します。
Windows PowerShell 7のパスワード生成コマンド
PowerShell 7(.NET)では、セキュリティ用途の RandomNumberGenerator.GetInt32 を使って各文字を選べます。Get-Random を文字選択の安全性根拠にはしません。
$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789'
-join (1..20 | ForEach-Object {
$chars[[Security.Cryptography.RandomNumberGenerator]::GetInt32($chars.Length)]
})この静的メソッドが使えないWindows PowerShell 5.1環境では、古い Get-Random 例へ置き換えず、PowerShell 7へ更新するか、OpenSSLまたは組織で承認された秘密情報管理ツールを使用してください。
Pythonのパスワード生成コード
標準ライブラリの secrets を使い、大文字・小文字・数字を最低1文字ずつ含むまで生成し直す例です。random はセキュリティ用途に使用しません。
import secrets
import string
symbols = '!#$%&()*+,-./:;<=>?@[]^_{|}~'
alphabet = string.ascii_letters + string.digits + symbols
while True:
password = ''.join(secrets.choice(alphabet) for _ in range(20))
if (any(c.islower() for c in password)
and any(c.isupper() for c in password)
and any(c.isdigit() for c in password)
and any(c in symbols for c in password)):
break
print(password)PHPのパスワード生成コード
random_bytes() や random_int() を使うことで、暗号学的に安全な乱数を生成できます。
function generatePassword($length = 16) {
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$password = '';
for ($i = 0; $i < $length; $i++) {
$password .= $chars[random_int(0, strlen($chars) - 1)];
}
return $password;
}
echo generatePassword(16);Basic認証用パスワードの生成
Webサーバーの Basic認証(.htpasswd)で使うパスワードも、同じ考え方で作成できます。Apacheのhtpasswdコマンドを使う場合の例です。
htpasswd -c /etc/apache2/.htpasswd ユーザー名
コマンド実行時に対話形式でパスワードの入力を求められます。コマンド引数へパスワードを直接書くと、シェル履歴やプロセス一覧に残る可能性があるため避けてください。事前に当サイトの記号なしパスワード生成ツールなどで作成した文字列を入力できます。クリップボード履歴を有効にしている端末では、貼り付け後の消去も検討してください。設定先が許可する文字を確認し、記号を減らす場合は長さで補います。SSHでは、可能ならパスワードより公開鍵認証を優先します。
パスワード生成コマンドと専用ツールの使い分け
コマンドやコードを都度書くのは手間がかかります。当サイトのパスワード生成ツールは、crypto.getRandomValues というブラウザ標準の暗号学的乱数APIを使用しています。乱数源が適切でも、出力の保存場所や端末が侵害されていれば安全とは限りません。複数個必要な場合は一括生成ツールも便利です。
テストデータとAPIキー風ダミー値
記号なしのランダムな文字列(APIキー風のダミー値やテストデータ)にはランダム文字列生成ツールを利用できます。ただし、本番APIキーには権限範囲、有効期限、ローテーション、失効、利用記録が必要です。実際のキーはサービスまたはサーバー側の秘密情報管理機能で発行してください。
生成後に残るログとクリップボードに注意
安全な乱数で生成しても、標準出力をCIログへ残す、チャットへ貼る、コマンド引数に含める、共有クリップボードへ置くと漏洩経路になります。自動化では秘密情報ストアへ直接書き込み、ログをマスクし、不要になった値を失効できる運用まで設計してください。