QSLカードのデジタル署
- まえがき
近年、多くの電波局が紙のQSLカードの使用を減らし、電子版QSLカードやオンラインログサービスを使用するようになった。しかし、オンラインログサービスは特定のウェブサイトに依存し、電波局の個性を十分に表現できないため、完全に紙のQSLカードを代替することはできないと認識した。
同時に、署名付きの電子版QSLカードは容易に偽造されるため、単独で通信の真正性を証明することができません。 本稿では、電子QSLカードの機能や個別のQSLカードとしての機能を損なうことなく、QSLカード上の情報をデジタル署名するための実現可能な方法を提案します。
- 範囲
本論文では、デジタルQSLカードへのデジタル署名を行う方法を定義しています。ただし、本論文は公開鍵の配布、信頼性、および無効化プロセスの要件について規定していません。
- 要件
本文で提案されているデジタル署名は、以下の要件を満たします。
i. デジタル署は、容易に識別・検証でき、中央集権的なサードパーティサービスへの依存を必要としません。
ii. デジタル署は、QSLカードのデザインや美観に顕著な影響を与える。
iii. 受信者が受信したQSLカードのフォーマット変換などの操作が、署名の有効性に影響を与えないこと。
iv. 受信者は、数字による署名を含むQSLカードを印刷し、印刷されたカードは独立して検証可能。
- 基準となる引用文書
GB/T 1.1-2020 規格化作業指針 第1部:規格文書の構造と作成規則
本文中の太字で「(禁止)”、“(推奨されない)”、“可能です、不要”、“(できない)”、“(不可能)「の使用は、「GB/T 1.1-2020 規格における標準化作業指針 第1部:標準化文書の構造と作成規則」の付録Cで定義されているものに準拠しています。
- 定義
5.1 基本定義
- バイト 8ビットのバイナリで構成された記号
- 署名付きのデータ 実際に署名されたデータの中で、意味のある部分
- 署名されたデータ デジタル署名アルゴリズムの入力
- 署名 ファイルヘッダー、署名アルゴリズムの説明、およびデジタル署名などの要素で構成されるファイル。
5.2 SSHメッセージ
本稿では、SSHメッセージ構造体が複数回にわたって記述されており、ここで使用されているデータ型は以下の通りです。
ssh-string 4バイト、ビッグエンディアン形式で表現された文字列の長さと、その長さで指定されたバイト列。このバイト列には、Unicode NULL文字を含むことができるが、複数のUnicode NULL文字は含まれない。
uint32 4バイト、ビッグエンディアン形式で表現される32ビットの符号なし整数。
バイト\[N] Nバイト、その他の情報なし
varint 可変長の数値。上位ビットは、その数値が最後の桁であるかどうかを示す(1は「否」、0は「はい」)。例えば、150 は以下のように表現されます。10010110 00000001、16進数を表記96 01注:このタイプはSSHメッセージの定義ではありません。
具体的な実装
6.1. デジタル署名アルゴリズムの選択
本設計では、SSHの鍵を使用してQSLカードに記載された情報をデジタル署名します。これは、SSHの署名メッセージがPGPで署名されたメッセージよりも小さいため、QSLカードに表示しやすいためです。
具体的なアルゴリズムの選択については、Ed25519という楕円曲線暗号を使用しました。これは、Ed25519の公開鍵と署名のサイズが小さいため、QSLカードに組み込みやすいからです。
署名欄には、署名対象となる情報が含まれていません。
6.2 デジタル署のADIFデータ
デジタル署のペイロードは、QSLカードに表示される情報のみから構成される1つのADIFファイルです。
6.2.1 ADIFの構築
この情報には、デジタル署名を使用し、ADIF形式で表現されています。これにより、人間が読みやすく、簡単に構造化することができます。また、デジタル署名は、署名された情報そのものではなく、そのため、署名の長さは、署名された情報の長さに影響しません。
以下の情報は順番にADIFデータに含まれるもの:
- QSO_DATE
- TIME_ON
- BAND
- CALL
- MODE
- STATION_CALLSIGN
- OPERATOR
その中で、 QSO_DATE8桁の数字(年、月、日)で表される協定世界時(UTC)の日付 TIME_ON6桁の数字(時、分、秒)で表される協定世界時刻(UTC)、QSLカードに通信の秒数が印刷されていなくても、時間は切断整分(つまり、秒数を0にする)。
上記すべての項目について対応大文字で表記してください。もしQSLカードにオペレーターの名前が記載されていなければ、OPERATOR修正なしのSTATION_CALLSIGN.
例えば、以下のQSLカード:
BB0BBB 宛
DE B4/BG6TOE
日時 (BJT) / 周波数 / モード / RST
2023-01-01 02:00:59 14.245 MHz USB 59 59
[ ]PSE [ ]TNX QSL
VY TU! 73
そのADIF形式のデータを以下のように変換します:
<QSOの日付:8>20221231<時間:6>180000<バンド:3>20M<コール:6>BB0BBB<モード:3>USB<ステーションのコールサイン:9>B4/BG6TOE<オペレーター:6>BG6TOE<EOR>
このドキュメントxxd出力形式:
3c51 534f 5f44 4154 453a 383e 3230 3232 → "Wi-Fi" <QSOの日付:8>2022
00000010: 3132 3331 3c54 494d 455f 4f4e 3a36 3e31 "http://example.com/file.pdf"<時間:6>00000020: 3830 3030 303c 4241 4e44 3a33 3e32 304d "http://www.example.com/file.pdf" 80000<バンド:3>20M
00000030: 3c43 414c 4c3a 363e 4242 3042 4242 3c4d <コール:6>BB0BBB<M
00000040: 4f44 453a 333e 5553 423c 5354 4154 494f ODE:3>USB<STATIO
00000050: 4e5f 4341 4c4c 5349 474e 3a39 3e42 342f コールサイン:9>B4/
00000060: 4247 3654 4f45 3c4f 5045 5241 544f 523a BG6TOE<オペレーター:
00000070: 363e 4247 3654 4f45 3c45 4f52 3e 6>BG6TOE<EOR>
注意点:本文末避けるべき不要余った文字(改行、スペース、タブなどを含む)<EOR>この文字列には、何も含まれていません。
6.2.2 複数のQSOを含むADIF形式の情報を構築する
もし1枚のQSLカードに複数のQSOが含まれている場合、対応するADIFファイルは…対応通聯のタイムスタンプに従い、各QSOのADIFデータを直接連結します。避けるべき不要含まれる文字(改行、スペース、タブなど)<EOR>この文字列には、何も含まれていません。
6.3 署名データ
6.3.1 プレゼンテーション方法
署名データ可能ですベース64エンコードされた後、直接QSLカードに表示される署名データ。いいですね等幅フォントによるレイアウトを使用。使用するフォント対応区別できるi、l、1, O、o、0, 5、SBase64で使用されるエンコード文字。
署名データ可能ですBase32エンコード後に直接QSLカードに表示される署名データ。いいですね等幅フォントを用いたレイアウトを使用してください。
署名データいいですねBase45でエンコードされ、QRコードに格納された署名データ。対応個別のQRコード用。このQRコード可能です黒や白以外の色を使用するが、対応明るい領域をQRコードの背景として、暗い領域をQRコードの色として使用する。
生成時のQRコード認識の成功率を確保するために、QRコードをデータ格納媒体として使用する。推奨されませんBase45以外のエンコーディングを使用する。
6.3.2 バイナリ署名データ形式
二進位署名には、SSH署名の構造体が使用され、その形式は以下の通りです。
`byte[6]` MAGIC\_PREAMBLE
uint32 SIG\_VERSION
ssh-string publickey
ssh-string namespace
ssh-string reserved
ssh-string hash\_algorithm
ssh-string signature
その中には:MAGIC_PREAMBLE~のためにSSHSIG, SIG_VERSION1.
publickeyシリアライズされた署名キーの公開鍵。
namespace対応~のためにadif-qslv1.
reserved対応空です。
hash_algorithm対応~のためにsha512(つまり、常にデータをSHA512で署名すること)。
signatureSSHメッセージの署名に使用ssh-ed25519アルゴリズム。
6.3.3 署名の簡略化
署名の内容をより分かりやすく表示できるように、可能です署名の内容を簡潔化する。簡略化した署名は、ヘッダーとED25519署名データのみを含む。その際、ヘッダーは固定されている。DQSLV1、それに続いて64バイトのED25519署名X | Y。受信側が「」で始まるメッセージを受信した場合DQSLV1署名データを取り扱う際に、対応これを標準の署名形式に展開し、検証します。
6.3.4 署名されたコンテンツ
実際に署名された内容は以下の通りです:
`byte[6]` MAGIC\_PREAMBLE
`ssh-string` namespace
`ssh-string` reserved
`ssh-string` hash\_algorithm
`ssh-string` H(message)
その中には:MAGIC_PREAMBLE~のためにSSHSIG, SIG_VERSION1.
publickey対応シリアライズされた署名キーの公開鍵。namespace対応~のためにadif-qslv1.
reserved対応空です。
hash_algorithm対応~のためにsha512(つまり、常にデータをSHA512で署名すること)。
message4.2で説明されているADIFファイル、 H(メッセージ)そのSHA-512アルゴリズムに基づくフィンガープリント。
この内容をSSHメッセージ形式でエンコードし、Ed25519の秘密鍵を使用してssh-ed25519署名を行うことで、4.3.1節の内容を取得できます。signatureフィールド。
- 元の QSOデータを追加
署名には、機械による直接認識・検証を容易にするため、元のQSOデータを付加することができます。元のQSOデータは、以下のフィールドを含む、簡潔な最小限のQSOメタデータです:通信時間、通信帯域、通信モード、受信側コールサイン、送信側コールサイン、OP。
その形式は以下の通りです:
`MAGIC_PREAMBLE` (6 バイト)
`call` (varint)
`station_callsign` (varint)
`operator` (varint)
`data` (ssh 文字列)
これらのうち、「call」、「station\_callsign」、「operator」は、それぞれ呼号を37進数で表現しています(下記参照)。
+---------++----+----++----+----+
|文字|番号||文字|番号||文字|番号 |
+---------++----+----++----+----+
| 0 | 0 || C | 12 || O | 24 |
| 1 | 1 || D | 13 || P | 25 |
| 2 | 2 || E | 14 || Q | 26 |
| 3 | 3 || F | 15 || R | 27 |
| 4 | 4 || G | 16 || S | 28 |
| 5 | 5 || H | 17 || T | 29 |
| 6 | 6 || I | 18 || U | 30 |
| 7 | 7 || J | 19 || V | 31 |
| 8 | 8 || K | 20 || W | 32 |
| 9 | 9 || L | 21 || X | 33 |
| A | 10 || M | 22 || Y | 34 |
| B | 11 || N | 23 || Z | 35 |
| / | 36 |+----+----++----+----+
例えばB1CRA以下のように表示します。11 * 37^4 + 1 * 37^3 + 12 * 37^2 + 27 * 37 + 10 = 20683861
その中で、「data」は複数の最小のQSOを繋ぎ合わせた文字列であり、その形式は以下の通りです。
varint 通信時間
varint 帯域
バイト[8] モード
その中で、QSOのタイムスタンプは協定世界時(BJT)1970年1月1日から経過した秒数(ただし、分単位で正確な値)。バンドは、対応する周波数の下限(キロヘルツ)を示す数値であり、例えば20メートルのバンドの場合、14000と表記されます。モードは、通信方式を示す文字列です。8バイト未満の場合は\0補完
- 例
仮定 ST4TION ラジオを使用する C3SHI ~と TE5T 2023年1月1日午前10時05分30秒(北京時間)、20メートルの帯域でMFSK方式を用いて通信を確立しました。 現在ST4TION以下のQSLカードに、自身の署名を記入してください。
TE5T宛 DE C3SHI 局からの情報
日付 時間 (SSH) / 周波数 / モード / RST
2023-01-01 10:00 14.074 MHz MFSK 59 59
[ ]PSE [X]TNX QSL
VY TU!73
ST4TION私の秘密鍵は:
-----BEGIN OpenSSH プライベートキー-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACADTnJZ6blw4CsqVoxzv9iWVVl0ycM8Neqb9QvTyvKqCAAAAJiuWf0orln9
KAAAAAtzc2gtZWQyNTUxOQAAACADTnJZ6blw4CsqVoxzv9iWVVl0ycM8Neqb9QvTyvKqCA
AAAEDgyhqzLTK6rmVqjfvHpvHPYJzdeVuDhRo93XO98jDl1QNOclnpuXDgKypWjHO/2JZV
WXTJwzw16pv1C9PK8qoIAAAAFW1hdHN1QEJHNlRPRS1Ob3RlYm9vaw==
-----END OpenSSH プライベートキー-----
その公開鍵は:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIANOclnpuXDgKypWjHO/2JZVWXTJwzw16pv1C9PK8qoI
その場合、以下の形式のADIFデータ(有効な署名付きペイロード)となります。
<QSOの日付:8>20230101<時間:6>020500<バンド:3>20M<コール:4>TE5T<モード:4>MFSK<ステーションのコールサイン:5>C3SHI<オペレーター:7>ST4TION<EOR>
注意点:
- カード表面に記載されている北京時間(現地時間)は、協定世界時(ADIF)に変換する必要があります。
- 生成されたADIFファイル内の秒数が、無条件に0に切り捨てられる。
- 波長は14.074から算出され、20MHzとなります。
- RSTはADIFに含まれていません。
このADIFデータSHA512指紋は:
5d10 5c01 843a 14ad 9852 5f40 f9e9 36d5
0e00 56b0 d98b a04f 6d1d d337 efb8 11bb
f397 52d3 6233 6b64 ab8f 430f cf6b e95d
bfb4 39b9 26c8 fb39 9cbf 414a b386 a1b4
以下の形式で署名されたデータを作成します:
00000000: 5353 4853 4947 0000 000a 6164 6966 2d71 SSHSIG....adif-q
00000010: 736c 7631 0000 0000 0000 0006 7368 6135 slv1........sha5
00000020: 3132 0000 0040 5d10 5c01 843a 14ad 9852 @...].\..:...R
00000030: 5f40 f9e9 36d5 0e00 56b0 d98b a04f 6d1d _@..6...V....Om.
00000040: d337 efb8 11bb f397 52d3 6233 6b64 ab8f .7......R.b3kd..
00000050: 430f cf6b e95d bfb4 39b9 26c8 fb39 9cbf C..k.]..9.&..9..
00000060: 414a b386 a1b4 AJ....
上記で示した秘密鍵を使用してください。ssh-ed25519署名の方法:
00000000: 0000 0053 0000 000b 7373 682d 6564 3235 ...S....ssh-ed25
00000010: 3531 3900 0000 4082 84f9 edcb 8ef8 6cdf 519...@.......l.
00000020: 5bee c347 6762 84ea ce4b 4644 6429 6900 [..Ggb...KFDd)i.
00000030: 4139 6e79 9bbd f74c 2b94 0e53 541e 4dfa A9ny...L+..ST.M.
00000040: 94db 704a 9b77 aad1 4dcd
署名形式:
00000000: 53 53 48 53 49 47 00 00 01 00 00 33 00 00 SSHSIG.......3..
00000010: 0b 73 73 68 2d 65 64 32 35 35 31 39 00 00 ssh-ed25519...
00000020: 20 03 4e 72 59 e9 b9 70 e0 2b 2a 56 8c 73 bfd8 .NrY..p.+*V.s..
00000030: 96 55 59 74 c9 c3 3c 35 ea 9b f5 0b d3 ca f2 aa .<5........
00000040: 0800 0000 0a61 6469 662d 7173 6c76 3100 .....adif-qslv1.
00000050: 0000 0000 0000 0673 6861 3531 3200 0000 .......sha512...
00000060: 5300 0000 0b73 7368 2d65 6432 3535 3139 S....ssh-ed25519
00000070: 0000 0040 8284 f9ed cb8e f86c df5b eec3 ...@.......l.[..
00000080: 4767 6284 eace 4b46 4464 2969 0041 396e Ggb...KFDd)i.A9n
00000090: 799b bdf7 4c2b 940e 5354 1e4d fa94 db70 y...L+..ST.M...p
000000a0: 4a9b 77aa d14d cd2e 5d6b 3f30 c644 c67e J.w..M..]k?0.D.~
000000b0: 84ca 4d07 ..M
簡潔な署名:
00000000: 4451 534c 5631 8284 f9ed cb8e f86c df5b DQSLV1.......l.[
00000010: eec3 4767 6284 eace 4b46 4464 2969 0041 ..Ggb...KFDd)i.A
00000020: 396e 799b bdf7 4c2b 940e 5354 1e4d fa94 9ny...L+..ST.M..
00000030: db70 4a9b 77aa d14d cd2e 5d6b 3f30 c644 .pJ.w..M..]k?0.D
00000040: c67e 84ca 4d07 ~..M.
署名のBase64エンコード:
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgA05yWem5cOArKlaMc7/YllVZdMnDPDXq
m/UL08ryqggAAAAKYWRpZi1xc2x2MQAAAAAAAAAGc2hhNTEyAAAAUwAAAAtzc2gtZWQyNTUxOQAA
AECChPnty474bN9b7sNHZ2KE6s5LRkRkKWkAQTlueZu990wrlA5TVB5N+pTbcEqbd6rRTc0uXWs/
MMZExn6Eyk0H
簡略化された署名の Base64 エンコード:
RFFTTFYxgoT57cuO+GzfW+7DR2dihOrOS0ZEZClpAEE5bnmbvfdMK5QOU1QeTfqU23BKm3eq0U3N
Ll1rPzDGRMZ+hMpNBw==
署名されたBase45エンコード:
1OAK69*B9000100000610000B00ZQET7D CSF6RW6C97000524C-9MGB.JNCFS%F50YHHBOA0J+DB MPNR7TTT1:U%YQMUUN010002E1AVCC-CIFE1WDY86000000000V 0 8DRW6KE60008MA0006K1OQEBX50UCVW61A6000J10MMG QV0XPBIVTASD8U919KKCZUTAN93T8QA5K10WB7 GFV0OES9CWI2OAH$3NUVGXRJJ9Y5FVKQB.PK BL:7-2P94PJZG9X9
簡潔な署名用のBase45エンコード:
TS8*NAF+AMMG QV0XPBIVTASD8U919KKCZUTAN93T8QA5K10WB7 GFV0OES9CWI2OAH$3NUVGXRJJ9Y5FVKQB.PK BL:7-2P94PJZG9X9
- 情報提供のための参照ファイル
RFC4634 米国標準のハッシュアルゴリズム(SHAおよびHMAC-SHA)
RFC4648 Base16、Base32、および Base64 のデータエンコーディング
RFC8709 Ed25519 および Ed448 の公開鍵アルゴリズム、セキュアシェル(SSH)プロトコル用
RFC9285 Base45 データエンコーディング
ADIF アマチュア向けデータ交換形式(ADIF)仕様