暗号化関連のメモ

セキュリティ関係で中途半端な事を書くと多方面からいろい(略

地方自治体の補助金事業絡みで、自治体指定のホスティングサーバーに重要データのバックアップを取らないといけなくなったので、

自分用として暗号化関連の技術をメモります。

手っ取り早く特定ディレクトリを丸ごとバックアップ

scpやらrsyncやらでリモートへファイルを転送する処理は誰もがご存じだと思いますので、 「tarでgzip圧縮して、いい感じの名前を付けて暗号化」のコマンドを結論として記します。

$ tar cz -C /home/some_user/ some_directory | openssl enc -aes-256-cbc -iter 12345 -k yourpassword -out `date '+%Y%m%d_%H%M%S'`_dir_backup.tar.gz.enc

解説

わざわざ一時的にファイルに書き出さずに、パイプを利用してopensslコマンドにデータを流しています。 opensslコマンドでファイルを暗号化する場合は、-in filename とオプションを追加して指定すればOKです。 -aes-256-cbc は暗号化の種類と鍵長、モードを表しています。wikipediaに結構詳しく書いてありますが、

ひとまずAESという種類の256bitの鍵長を使っておけばOKだと思います(2020年1月現在)。

-iter 数字 で大きめのストレッチング回数を指定してブルートフォース対策。 -k パスワード でパスワードの指定。このiterとkで指定したものは復号時に必要になるため、忘れないようにしましょう。

dateコマンドでフォーマットを指定して、「日付_時間_」をファイル名の先頭に付けています。

データ暗号化、ハッシュ値化の対象

例えばウェブアプリケーションにおいて、データベースに格納されているあらゆる個人情報を暗号化(saltを含めて)してしまうと、 SQLのWhereによる問い合わせが困難になり、実用性が失われることでしょう。 よって、稼働中のデータベースの暗号化またはハッシュ値化すべきフィールドはある程度限られます。

それに対して、データベースのダンプファイル(バックアップファイル)は暗号化してもシステムの稼働に影響を与えないので、

面倒くさがらずに必ず暗号化するという運用にした方が好ましい。

  • ログインパスワード等はハッシュ値にする。不可逆に変換してしまう。
  • そのユーザー固有の、外部システムへの連携用認証情報等は暗号化する。復号に必要な情報はデータベースの外に置く。
  • Where等で条件指定されないことが明らかな個人情報項目は暗号化してしまう。
  • DBのダンプファイルは暗号化する。

prev: 連休が終わってしまった
next: FuelPHPでCSRF対策
created at : 2020-01-16 10:42:20
updated at : 2020-01-16 11:24:28
author : Toshiaki Yokoda