LoginSignup
8
3

More than 1 year has passed since last update.

ECDSA鍵暗号の作成と検証(openssl、cryptographyを利用)

Last updated at Posted at 2021-12-05

この記事は MicroAd Advent Calendar 2021 の6日目の記事です。

SKAdNetworkで利用されている暗号技術であるECDSA(楕円曲線DSA)暗号を利用したので、鍵の生成、暗号の生成(署名)、暗号の検証までの一連の手順をまとめます。

今回はopensslを使うパターンと、Pythonライブラリのcryptgraphyを使うパターンの2つ記載します。

前書き

以下、P-256曲線を利用している。

opensslを利用する場合

鍵の生成

秘密鍵

$ openssl ecparam -name prime192v1 -genkey -noout -out key.pem 

公開鍵

$ openssl ec -in key.pem -pubout -out pubkey.pem
read EC key
writing EC key

署名

メッセージを記入

$ vi message.txt

秘密鍵を使って署名

$ openssl dgst -SHA256 -sign key.pem message.txt > signature.dat

鍵の検証

$ openssl dgst -SHA256 -verify pubkey.pem -signature signature.dat message.txt
Verified OK

cryptographyを利用する場合

import base64
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.exceptions import InvalidSignature

YOUR_PRIVATE_KEY = 'XXXXX'
YOUR_PUBLIC_KEY = 'XXXXX'
MESSAGE = 'abc'

pri_key = f"""-----BEGIN EC PRIVATE KEY-----\n{YOUR_PRIVATE_KEY}\n-----END EC PRIVATE KEY-----"""
pub_key = f"""-----BEGIN PUBLIC KEY-----\n{YOUR_PUBLIC_KEY}\n-----END PUBLIC KEY-----"""
private_key_ins = serialization.load_pem_private_key(pri_key.encode(), password=None)
public_key_ins = serialization.load_pem_public_key(pub_key.encode())

# private keyでシグネチャ生成
signature = private_key_ins.sign(signature_algorithm=ec.ECDSA(hashes.SHA256()), data=MESSAGE.encode())
attribution_signature = base64.b64encode(signature)

print('original message:', MESSAGE)
print('attribution_signature:', attribution_signature.decode())

# public keyでシグネチャ検証
try:
    public_key_ins.verify(signature, MESSAGE.encode(), ec.ECDSA(hashes.SHA256()))
    print('signature OK.')
except InvalidSignature:
    print('signature NG.')

YOUR_PRIVATE_KEY, YOUR_PUBLIC_KEYは各自で発行したものに置き換える

実行結果

maenishi_taka@MICROAD-PC-875 universe_bidder_log_db-skadn_postback_log % python advent.py
original message: abc
attribution_signature: (省略)
signature OK.
8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3