OpenPGP 鍵の生成と検査
エンコード処理はすべてブラウザ内で完結します。データは送信されません
実際に生成します(デモではありません):有限体演算、エドワーズ曲線の点演算、SHA-512、OpenPGP のパケット構造をすべて自前で持ち、得られる公開鍵・秘密鍵ブロックは `gpg --import` で取り込めます(自己署名と副鍵の束縛署名も実際に計算)。生成・解析・gpg コマンド生成の 3 モード。乱数は `crypto.getRandomValues` 由来で、鍵はあなたのブラウザー内で生まれ、1 バイトも送信しません —— これが本ツールの存在理由です。どこかのサイトに秘密鍵を預ける代わりに、手元に置けます。
機能
- Ed25519 主鍵を実際に生成(RFC 8032 のベクターで固定)
- 任意の X25519 暗号副鍵(RFC 7748)と束縛署名
- 出力した ASCII armor は gpg に取り込め、公開鍵も秘密鍵も使えます
- 解析モード:指紋(v4 は SHA-1 / v5 は SHA-256)、鍵 ID、アルゴリズム、作成・有効期限
- ASCII armor の CRC24 を検証し、改変・切り詰めを指摘
- `gpg --quick-generate-key` コマンドを生成(有効期限・副鍵のヒント付き)
- Ed25519・X25519・RSA・DSA などの鍵を解析
- 1 行ずつコピーすることも、すべてコピーすることもできます
使い方
- モード(生成 / 解析 / gpg コマンド)を選びます
- 生成:ユーザー ID・アルゴリズム・有効期限を設定し、公開鍵と秘密鍵の armor を得ます
- 解析:ASCII armor か 16 進数を入力欄に貼り付けます
- armor をファイルに保存して `gpg --import` で取り込みます
よくある質問
- 生成した秘密鍵にパスフレーズは付きますか?
- いいえ。本ツールは S2K 暗号化を実装していません。パスフレーズ保護にチェックを入れても、秘密鍵にパスフレーズは付きません。取り込み後すぐに `gpg --edit-key <指紋> passwd` を実行してください —— 保護のない秘密鍵は入手した誰でも使えます。偽の安心を与えないため、あえて正直に表示しています。
- v5 鍵の解析が限定的なのはなぜですか?
- 指紋アルゴリズムは区別しています(v4 は SHA-1、v5 は SHA-256 で接頭辞と長さフィールドも異なります)が、v5 の鍵材料とサブパケット配置はまだ完全には解析していません。実在する鍵の大半は今も v4 です。
- 本当に gpg に取り込めますか?
- はい。開発時に gpg 2.4 で実測しました:取り込み後に自己署名が有効で、署名と検証ができ、X25519 副鍵の束縛署名も有効で暗号化に使えます。鍵パケット・ユーザー ID・自己署名・副鍵束縛の各バイトは OpenPGP 仕様に従っています。
- Web ページで鍵を生成して安全ですか?
- このページは完全にローカルで計算し、リクエストもサーバーもありません。ただしページはネットワークから読み込まれ、監査はできません。生成した鍵は画面・クリップボード・ダウンロードに残ります —— 早めにキーリングへ取り込み、チャットに貼らないでください。最高水準の保証が必要なら、手元の `gpg` で生成してください。
関連ツール
RSA
エンコードPEM の公開鍵で暗号化、秘密鍵で復号、署名と検証。RSA 鍵ペアの生成にも対応。SPKI・PKCS#8・PKCS#1 を読み、すべてローカルで処理します。
SSH 鍵
エンコードSSH 公開鍵の種類・ビット数・SHA-256 と MD5 のフィンガープリント・authorized_keys オプションを解析、または Ed25519 / RSA の鍵ペアを生成します。
自己署名証明書
エンコードブラウザ内で RSA 鍵ペアと自己署名 X.509 証明書を生成します。鍵長 1024〜4096 ビット、署名ハッシュ SHA-256/384/512、SAN 付き。ローカル HTTPS 向け。
Base64 変換
エンコードテキストを Base64 に変換し、Base64 からテキストへ戻します。日本語や中国語、emoji も UTF-8 として正しく処理。すべてブラウザ内で完結し、内容は送信しません。
URL エンコード
エンコード日本語や中国語、空白・記号を %XX にエスケープし、復元します。URL 全体とパラメータ値では方式が異なり、間違えるとリンクが開けません。ブラウザ内で処理します。
HTML 実体参照
エンコード< > & と引用符を HTML 実体参照に変換し、文字へ戻します。デコードは1回だけで、&lt; は山括弧ではなく < になります。すべてブラウザ内で処理します。