Python 暗号関連機能
Python の標準ライブラリに含まれている暗号関連機能についてまとめています.
標準ライブラリには暗号関連処理に使えるモジュールとして,疑似乱数生成やハッシュ関数などがあります.Python では基本型として多倍長整数型があるため,メモリの許す限り無制限の桁数で整数計算が可能ですので,公開鍵暗号の実装などで別に多倍長整数ライブラリなどを用意する必要はありません.
Python で利用できる暗号ライブラリについては,Python 暗号ライブラリ (PyCyptodome) を参照下さい.
- random
擬似乱数生成器を実装しているモジュールである.
このモジュールで提供されている関数は,random.Random クラスの隠蔽されたインスタンスのメソッドである.内部状態を共有しない生成器を取得するため,自分で Random のインスタンスを生成することができる.
また,独自の乱数生成器を使いたい場合,クラス Random をサブクラス化することもできる.
- random.seed(a=None, version=2)
乱数生成器を初期化する.a が省略されるか None の場合,現在のシステム時刻が使用される.
- random.getstate()
乱数生成器の現在の内部状態を記憶したオブジェクトを返す.
- random.setstate(state)
getstate() が呼び出された時の乱数生成器の内部状態 state を復元する.
- random.getrandbits(k)
k 桁の乱数ビットの整数を返す.
- random.randrange(start, stop[, step])
range(start, stop, step) の要素からランダムに選ばれた要素を返す.
- random.randint(a, b)
a <= N <= b であるようなランダムな整数 N を返す.
- secrets
パスワードやアカウント認証,セキュリティトークンなどの機密を扱うのに適した暗号学的に強い乱数を生成する.OS が提供する発生源によって乱数を生成する os.urandom() 関数を使うモジュールである(OS 環境依存).
random.SystemRandom クラスを利用している.
- secrets.choice(sequence)
空でない sequence から要素をランダムに選択して返す.
- secrets.randbelow(n)
[0, n) のランダムな整数を返す.
- secrets.randbits(k)
ランダムな k ビットの整数を返す.
- secrets.token_bytes([nbytes=None]
nbytes バイトのバイト文字列を返す.
- secrets.token_hex([nbytes=None])
16進数のランダムなテキスト文字列を返す.
- secrets.token_urlsafe([nbytes=None])
nbytes のランダムなバイトを持つ URL 安全なテキスト文字列を返す.テキストは Base64 でエンコードされる.
- hashlib
メッセージダイジェスト用の各種アルゴリズム(SHA1,SHA224,SHA256,SHA384,HA512 など) を提供する.
- コンストラクタ
- hashlib.new (name, [data])
アルゴリズム名 name のハッシュオブジェクトを生成する.
- hashlib.sha1() , hashlib.sha256(), etc.
特定のアルゴリズムのコンストラクタメソッド
- メソッド
- update (data)
バイト列 data でハッシュオブジェクトを更新する.
- digest ()
update() メソッドに渡されたデータのダイジェスト値を返す.
- hexdigest ()
update() メソッドに渡されたデータのダイジェスト値を 16進文字列として返す.
- copy ()
ハッシュオブジェクトのコピーを返す.
- 定数属性
- name
ハッシュアルゴリズムの正規名称
- digest_size
生成されたハッシュのバイト数
- block_size
ハッシュアルゴリズムのブロックのバイト数
- 鍵導出
- hashlib.pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None)
PKCS#5 のパスワードに基づいた鍵導出関数 PBKDF2 を提供する.dklen は,導出される鍵の長さである.dklen が None の場合,ハッシュアルゴリズム hash_name
のダイジェストサイズが使われる.
- hmac (HMAC クラス)
RFC 2104 で記述されている HMAC アルゴリズム(メッセージ認証用の鍵付きハッシュ)を提供する.
- コンストラクタ
- hmac.new (key, msg=None, digestmod=None)
新しい hmac オブジェクトを返す.key は秘密鍵を与える bytes または bytearray オブジェクト,msg は対象メッセージ,digestmod は利用するダイジェスト名である
(デフォルトは hashlib.md5 のコンストラクタ)
.
- hmac.digest(key, msg, digest)
与えられたパラメータ key,msg,digest のダイジェスト値を返す.
- メソッド/定数属性
hashlib と同じ