Carpe Diem

備忘録

セキュリティ

二重サブミットを防ぐ方法

背景 支払い処理などで問題になりがちな二重サブミット問題(Double Posting Problem)ですが、主に以下のようなケースで発生します。 ボタンのダブルクリック ユーザが間違えて2回ボタンを触ってしまう(ときには遅さにイライラして何度もクリック) リク…

SCRAM (Salted Challenge Response Authentication Mechanism) 認証

概要 MongoDBやPostgreSQLでは認証時にSCRAM (Salted Challenge Response Authentication Mechanism) と呼ばれる認証方式を採用しています。 これは従来のチャレンジレスポンス型の認証を改善したものであり、パスワード(ハッシュ値含む)といった機密情報…

YAMLのような設定ファイルで環境変数を扱う

背景 christina04.hatenablog.com ではconfig.yamlを読み込ませてサーバを起動するのですが、その中にSlackのAPIトークンを入れる箇所がありました。 config.yaml自体はConfigMapで渡しているのですが、中に記述されているAPIトークンは環境変数でSecretで管…

SSHにYubikeyを使う

背景 OpenSSH 8.2からU2F/FIDO2デバイスを用いたハードウェア認証に対応しており、仮に秘密鍵が漏洩しても鍵の生成時に利用したデバイス(Yubikeyなど)がないとsshできなくなるというセキュアな対応が実現できます。 以前はOpenPGPに委譲させたり、PIVで対…

YubikeyにGPGの副鍵を転送する

概要 前回作ったGPGの副鍵をYubikeyに移してセキュアに管理できるようにします。 環境 Yubikey 5C NFC(Firmware: 5.4.3) GPG 2.2.32 前提知識 Yubikey 5が持つ機能 Yubikey 5には以下の機能があります。 ref: ワンタイムパスワードトークンYubiKey |(株)ソ…

GPGで主鍵と副鍵を作成する

背景 Yubikeyを新しくしたのでGPGの運用もYubikeyに寄せようと思ったのがきっかけです。 環境 GPG 2.2.32 前提知識 主鍵と副鍵 GPGには主鍵と副鍵の関係があります。またそれぞれ秘密鍵と公開鍵のペアになっています。 これは鍵が漏洩した際にローテーション…

CodecovのBash Uploader問題の再発防止策

概要 コードカバレッジサービスのCodecovでは、カバレッジファイルをアップロードする際に以下のようにbash scriptを実行します。 bash <(curl -s https://codecov.io/bash) ref: Codecov Bash uploader しかし先日、このbash scriptが何者かに勝手に改竄さ…

セキュアなトークン管理方法

概要 クライアント↔サーバ間の認証・認可情報としてのトークン管理はWebサービスとしては必ずつきまとうものですが、一方できちんと実装しないとセキュアに管理はできません。 今回はそのトークン管理方法の一例を紹介します。 要件 今回の主な要件は以下で…

データ暗号化で考慮すること(鍵編)

概要 前回の続きです。 christina04.hatenablog.com 今回は暗号化における鍵(共通鍵)について説明します。 前提知識 鍵とは 鍵とはとても大きな数です。 鍵のビット長が大きい=鍵空間が大きいことを意味します。つまり可能な鍵の総数が大きいため総当り攻…

データ暗号化で考慮すること(暗号アルゴリズム編)

概要 ユーザのメールアドレスといった機密情報を暗号化・復号したいユースケースがあるとします。 メール送信などに利用するためパスワードのようにハッシュ化するのでなく、復号して利用したいケースです。 機密情報の管理全般については以前↓で話しました…

パスワードを保存するときに考慮すること

概要 パスワードを保存する際は平文で保存せずハッシュ化するのは当然です。しかし単にハッシュ化するだけでなく 暗号学的に優れたハッシュ関数を使う saltを付ける 計算コストのかかるアルゴリズムを採用する ストレッチングで計算コストを上げる といった…

機密情報の管理で大切なこと

概要 機密情報の管理はいつも悩みのタネです。 その管理に僕はHashiCorp Vaultを推してますが、その理由を含めて説明します。 管理方法の課題 機密情報の管理で考えなければいけないことはたくさんあります。 データの暗号化 どこに保存するか 認証 アクセス…

HashiCorp VaultのDynamic Secrets

概要 HashiCorp VaultにはDynamic Secretsという期限の付いた認証情報を動的に生成してパブリッククラウドやDBへのアクセスをセキュアに保つ仕組みが用意されています。 課題・背景 秘密情報とその周辺の認証を一元化し、適切な暗号化・Auditなどをしっかり…

SSL/TLS周りで必要な知識

概要 SSL/TLSでは ルート証明書 (root certificate) 中間証明書 (intermediate certificate) サーバ証明書 (primary certificate) など色々なファイルや用語があり、混乱しやすいのでまとめます。 認証局(CA)について ルートCA 認証局です。 この認証局が発…

HashiCorp VaultのTransit secret engineでデータを暗号化・復号する

概要 HashiCorp VaultにはTransit Secrets Engineという、暗号化・復号をしてくれる機能があります。 このTransit Secrets EngineはKey/Valueのように暗号化データを保存することはなく、暗号化するための暗号化キーを保存&バージョン管理します。 また複数…

署名と暗号強度について

概要 署名ロジックを選ぶ際に、どのアルゴリズムにするか、どれくらいの鍵長が適切なのかが分からなかったので調べてまとめました。 対象 共通鍵暗号(対称暗号) AES 公開鍵暗号 RSA ECC

JWTを認証用トークンに使う時に調べたこと

概要 JWTを認証用トークンに使う時に調べたことをまとめます。 JWTとは JWTはJWSやJWEの構造の中にエンコードして埋め込まれるJSON形式のclaimのセットです。 一般的にはJWS形式のJWTが使われるのでそれを前提に進めます。 JWS形式のJWTは以下のフォーマット…

VeraCryptを使う

概要 マルチプラットフォーム対応の暗号化ツールであるTrueCryptがどういうわけか開発停止になったので、その後継となるVeraCryptを使うことにします。 環境 Ubuntu 14.04 VeraCrypte 1.0f-1 インストール 以下のwgetのURLが使えない時はSourceForgeから直接…