0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python初心者】secretsで安全なパスワードとトークンを生成する

Posted at

Pythonでは乱数を扱うために random モジュールをよく使いますが、セキュリティが重要な場面では secrets モジュールを使うのが推奨されています。この記事では、secrets を使って安全なパスワードやトークンを生成する方法を学んだ内容をまとめておきます。

secretsモジュールとは?

secrets はPythonに標準で備わっているモジュールで、**暗号学的に安全な乱数(予測されにくい乱数)**を生成するための機能が用意されています。
Webアプリなどで扱うパスワード生成やセキュアなトークン作成など、予測されると困るような値を扱う際に使います。

トークンって何?

トークンとは、一時的な認証や識別に使う「使い捨ての鍵」のようなものです。ログイン状態の管理や、パスワード再設定リンク、APIのアクセス制御などに使われます。

たとえば「本人しか知らないトークン」がURLに含まれていれば、その人だけが特定の操作をできるようになります。トークンは一般に、次のような特徴があります:

  • ランダムで長い文字列
  • 一意(ユニーク)で、推測しにくい
  • 有効期限つき、または一度しか使えない

まとめると、トークンは「一時的なキー」のようなものです。

ランダムなパスワードの生成

ランダムな英数字のパスワードを作る場合、secrets.choice() を使うことで、文字列から1文字ずつ安全に選び出すことができます。

import secrets
import string

# 英大文字+英小文字+数字を使った文字セットを定義
alphabet = string.ascii_letters + string.digits

# ランダムなパスワードを生成(12文字)
password = ''.join(secrets.choice(alphabet) for _ in range(12))
print(password)
実行例:
v7Kz1A3qY0mP

このように、毎回異なる安全な文字列が出力されます。

トークンの生成方法(16進数形式)

ログイン時のトークンや認証に使われる値として、ランダムな16進数のトークンを生成したい場合は secrets.token_hex() を使います。

import secrets

# 16バイト(=32文字)の16進数トークンを生成
token = secrets.token_hex(16)
print(token)
実行例:
9f74a6d52c234e2b1dbf3aa70b4a99cc

バイト数を変えることでトークンの長さも調整できます。

トークンの生成方法(URL安全形式)

トークンをURLに埋め込む場合には、secrets.token_urlsafe() を使うのが便利です。

import secrets

# 16バイト相当のURLセーフなトークンを生成
url_token = secrets.token_urlsafe(16)
print(url_token)
実行例:
p8zDs0fJZxwBI95QYINaFw

トークンをURLに埋め込むとは?

たとえば次のようなURLをメールで送ることがあります:

https://example.com/reset-password?token=p8zDs0fJZxwBI95QYINaFw

このように、URLのパラメータ(?token=...)としてトークンを含めることで、
「そのリンクをクリックした人」だけにパスワード再設定などの操作を許すことができます。

この方法は、次のような特徴を持っています:

  • 本人確認ができる(メールを受け取った人にだけ操作を許す)
  • 一度きり/時間制限つきにしておくことでセキュリティを保つ
  • URLに埋め込んで使えるよう、安全な文字だけで構成されたトークンを使う必要がある
     → そのために token_urlsafe() が便利です

おわりに

今回は secrets モジュールを使って、セキュリティ的に安全なパスワードやトークンを生成する方法をまとめました。
普段の学習で random を使いがちですが、セキュリティが関わる処理では必ず secrets を使うべきだということを理解しました。
あとで見返して復習できるように、実行例や使い方も含めて整理しました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?