データベースにパスワードを保存するとき、暗号化が必要である。Djangoでは、デフォルトで様々な暗号化アルゴリズムが用意されているが、追加でより強力な暗号化アルゴリズムを用いることもできる。
最も強力な暗号化アルゴリズムとして、bcript,argon2がある。
今回はそのアルゴリズムの概要とインストール、導入方法について紹介する。
bcrypt,argon2のインストール
- こちらの記事に詳細に記述されているが、bcryptは、「ハッシュ化」「saltの付加」「ストレッチング」という機能を持った最も強力な暗号化アルゴリズムの一つである。以下のコマンドでインストールできる。
pip install bcrypt # bcryptのインストール
- argon2は2015年のPassword Hashing CompetitionのWinnerとなったパスワードハッシュアルゴリズムであり、詳細については、こちらに記述されている。
pip install django[argon2] # argon2のインストール
インストールしたら、次にこれをDjangoのアプリケーションに適用するようにsettings.pyを設定する。
Djangoの暗号化アルゴリズムの設定
settings.pyの設定を行う。
- settings.pyには、まずINSTALLED_APPSにdjango.contrib.admin, django.contrib.auth, django.contrib.contenttypeの3つの設定が入っていることを確認する(デフォルトで入っているが、もし何らかの作業で消してしまったのなら、追加で入れるようにする)
- 次に、settings.pyにPASSWORD_HASHERSの設定を追加する。詳細はこちらのサイトに記載されているが、settings.pyのAUTH_PASSWORD_VALIDATORSの上に、PASSWORD_HASHERSとして、配列を追加する。
- settings.py
# 使用する暗号化アルゴリズムの設定
# 上から順に、ライブラリが存在するものが利用される。下の例では、Argon2が存在すればArgon2が使われなければBcryptSHA256が利用される
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.Argon2PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.BCryptPasswordHasher',
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
]
# 上から順に、ライブラリが存在するものが利用される。下の例では、Argon2が存在すればArgon2が使われなければBcryptSHA256が利用される
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.Argon2PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.BCryptPasswordHasher',
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
]
settings.pyを設定した後に、パスワードを登録する
管理画面から確認すると、パスワードがArgon2で暗号化されていることが記載されていることがわかる。
- 管理画面
以上、DjangoでArgon2やBcryptなどの強力なアルゴリズムを用いて暗号化する方法について記載しました。