- [情報技術] DKIMメール認証
- DKIMメール認証では、秘密鍵と公開鍵が使われます。
- 受信したメールのヘッダーに含まれている次のものを確認します。
-
- a:使用されたハッシュ関数。
- bh:正規化済みのメール本文をハッシュ化し、base64エンコードしたもの。
- h :署名に使用しているヘッダー情報のリスト。
- b:署名。hの指示通りのヘッダーをハッシュ化し、秘密鍵で暗号化およびbase64エンコードしたもの。
- DKIM認証では2つの照合を行います。
-
- 本文をハッシュ化およびbase64エンコードしたものとbhとが一致するか。
- hの通りのヘッダー情報をハッシュ化したものと、bをbase64デコードして公開鍵で復号化したものとが一致するか。
- bhの値は途中で改竄されやすい項目ですが、bの値は秘密鍵を持っている者だけが生成できます。仮に異なる秘密鍵で暗号化した場合は、公開鍵で復号化することができません。つまり、その時点で改竄が判明します。(実際には、メールフォームからの正しい送信であっても、公開鍵と対にならない秘密鍵が使用されたためにDKIM認証に失敗する場合もあります)
- 1と2の認証に使用するコマンドは次の通りです。
$ openssl dgst -sha256 -binary "正規化済みメール本文ファイル.txt" | base64
ZxgjUdBxt3GlOrQfX1etpRNDSDgeWhTylQ5LMmaO14o=
- コマンドの下に出てきたものが、正規化済みのメール本文をハッシュ化し、且つbase64エンコードしたものの例です。これがbhの値と一致していればPassです。
- あとは、署名の照合をします。あらかじめ、h通りのヘッダー情報と、DNSから取得した公開鍵をテキストファイル(ここでは "header.txt" と "key.pub")にしておきます。
$ echo "bの値" | base64 -d | openssl pkeyutl -verifyrecover -pkeyopt digest:sha256 -pubin -inkey key.pub | xxd -p
35429f9f619723fe0d3a9a47fb7bc30981ea7b6cb557a667f25de4203522
7bbc
- コマンドの下に表示されたものがハッシュです。公開鍵で復号化できたので恐らく大丈夫ですが、h通りのヘッダー生情報(最後の終端文字を必ず取り除いてください。改行はCRLF)をハッシュにしてみます。
$ openssl dgst -sha256 -binary header.txt | xxd -p
35429f9f619723fe0d3a9a47fb7bc30981ea7b6cb557a667f25de4203522
7bbc
- 復号化したハッシュと同じものが出ました。これで非改竄が証明されました。
- ちなみに、コマンドの最後にある `xxd -p` はバイナリを16進数のテキストデータに変えるコマンドです。`xxd -b` にすると2進数のテキストで表示されます。
- 2024-03-07 (Thu) by Canaid SK
- [情報技術] MySQl Error Code: Unknown collation: 'utf8mb4_0900_ai_ci'
- MySQL8から得たダンプファイルを5系のMySQLにImportしようとした場合、「Unknown collation: 'utf8mb4_0900_ai_ci'」というエラーが表示されます。ダンプファイル内の「utf8mb4_0900_ai_ci」を「utf8mb4_general_ci」に書き換えることでエラーを解消できます。
- このエラーが起きる理由は、Import先のRDMSでUnicode collationsに「utf8mb4_0900_ai_ci」が無いからです。次のコマンドで、RDMSで使用可能なUnicode collationsを確認できます。
SHOW COLLATION WHERE Charset = 'utf8mb4';
- 2024-01-31 (Wed) by Canaid SK
- [情報技術] Linuxコマンドでファイル名を一括置換
-
- Test 1.txt
- Test 2.txt
- Test 3.txt
- というファイル名から空白文字を取り除くときは、次のようなコマンドで一括変更ができます。
$ find . -name "Test*.txt" -exec bash -c 'mv "$0" ${0//" "/""}' {} \;
- -name:ファイル名指定
- -exec:実行オプション
- bash:bashスクリプトの起動
- -c:この後コマンドが来るよ!のお知らせ
- mv:ファイル移動コマンド
- $0:割り当てられた文字列
- ${0//" "/""}:$0の半角空白を無に置換
- {}:$0に割り当てる文字列(入力前にfindコマンドによって現在のファイル名に置き換えられる)
- \;:-execはここまでですよ、のお知らせ
- 2024-01-21 (Sun) by Canaid SK
- [ハードウェア] 原動機付自転車のウインカースイッチにKURE5-56
- 原動機付自転車のウインカーのスイッチが非常に固くなり、困っておりました。
- 屋根があるとはいえホコリに塗れる場所に置いておりますし、あまり乗れずにいたらそのような事態に。それでも力ずくでスイッチを切り替えていたのですが、この度、KURE5-56を吹き付けてみました。数度ON/OFFを繰り返し、そのまま放置すること1週間。スイッチの動きが購入当時のように滑らかになりました。
- 一応、Yahoo知恵袋で「5-56でもいいですよ」と書かれていたのを見ての実施でしたが、お試しになる際は自己責任ですのでご注意ください。
- 2024-01-12 (Fri) by Canaid SK
- [情報技術] LibreOffice Calcで行の移動(ドラッグ&ドロップ)
- LibreOfficeの表計算ことCalcで、行をドラッグ&ドロップで移動させる場合は、次の手順を踏みます。
-
- 行全体を選択する。
- Shift+Altを押しながら、行を目的の場所にドラッグする。
- ちなみに、Shift+AltではなくCtrl+Altを押しながらドラッグした場合、行の複製になります。
- 2023-10-08 (Sun) by Canaid SK
- [情報技術] Terminalの中で文字コードを変える
- 例えば文字コードにUTF-8を使用している端末で、TELNETで接続したサーバから送られてくるデータがShiftJISでエンコードされていると、文字化けを起こします。
- そんなときは、TELNETで使用するエンコードを変えて文字化けを解消できます。
$ luit -encoding SJIS telnet
- 2023-09-05 (Tue) by Canaid SK
- [情報技術] GJS (GNOME JavaScript)
- JavaScriptでGMONEプラットフォームを使うツールがあります。「GJS」です。
- Terminalで次のように入力すると、標準出力に出力できます。
$ gjs -c "print('test');"
test
- ログとして出力することもできます。
$gjs -c "log('this is a message');"
Gjs-Message: 10:29:09.603: JS LOG: a message with gjs
- インタプリタモードにすることもできます。
$gjs
gjs>
- 詳しくは公式サイトを見てください、
- 2023-08-30 (Wed) by Canaid SK
- [情報技術] SVGZ(圧縮SVG)ファイルを作る
- SVGはベクター画像なので、ラスター画像よりも大きなファイルサイズになります。しかし、拡大が苦手なラスター画像に対し、ベクター画像は拡大によるぼやけがありません。つまり、大きさごとにファイルを用意しなくてよいという強い利点があります。
- そこで、SVGの欠点である大きなファイルサイズを小さくする方法があります。SVGを圧縮します。圧縮したSVGは「svgz」などの拡張子にされることが多いです。
- 圧縮SVGをCUIで生成する方法は複数ありますが、最も簡単なのは、ベクター画像ソフト「inkscape」を利用する形です。たとえば「sample.png」という画像を圧縮SVGに変換するならば、
$ inkscape --export-type="svgz" sample.png
- を実行することで、「sample.svgz」という圧縮SVGファイルが生成されます。
- 他方、ImageMagickとpotraceを利用する形だと、
$ convert sample.png ppm:- | potrace -s - -o sample.svg
$ gzip -c sample.svg > sample.svgz
- のようになります。また、この方法では、SVG変換時に色情報が失われます。
- 2023-08-19 (Sat) by Canaid SK