最近、HMACハッシュ(hash_hmac)の使い方を書いてきたのでまとめです。
カテゴリー: Computer
-
岡山大学大学院 平成29年度ビジネスマインド養成講座のお知らせ
岡山大学大学院工学部では一般社会人向けの無料公開講座として、ビジネスマインド養成講座を開講しています。工学部の講座ですが技術的な内容に偏重せず幅広い内容です。業務の内容に関わず、一般社会人の方に理解いただける講座です。(学生の方の参加も大歓迎です)
- H29年度 ビジネスマインド養成講座のご案内
- H29ビジネス講座案内 (PDF)
- H29ビジネスマインド養成講座申込書 (Excel)
このブログをご覧になった方は、上記申込書にご記入いただき、件名を「H29ビジネスマインド養成講座申込」として info@es-i.jp へお送り頂ければ申し込み処理を行います。返信が無い場合、迷惑メールに分類されている可能性があります。お手数ですが、弊社(エレクトロニック・サービス・イニシアチブ 0866-90-2131)までお電話ください。
平成29年度ビジネスマインド養成講座一覧
上記PDFの案内書に記載されている講座一覧は以下の通りです。
担当講座
本年度も岡山大学のビジネスマインド養成講座の講師を勤めさせていただきます。情報セキュリティがよく解らない、必要性がよく解らない、対策の選択がよく解らない、の原因は基本的・根本的な部分の誤解や知識不足が原因であることがほとんどです。
私の担当講座(2017/11/11)では情報セキュリティ標準に基づいて、これらの誤解や知識不足を解消します。情報セキュリティに「完全」はありませんし、闇雲に対策するモノでもありません。講義をお聞きいただければ、少なくとも自身が行っている対策にそれなりの自信を持てるようになります。
- テーマ: 経営者・マネージャーが知るべき情報セキュリティ
- 日時:平成29年11月11日 土曜日 13:00 から 18:00
- 場所:岡山大学自然科学棟 第2講義室 (PDF案内書に地図を記載)
- 対象:社会人および近い将来社会人になる学生
- 費用:無料(車の場合は駐車料金が必要です)
以下のような方に有用な講義です。
- セキュリティとは何をどうすれば良いのか、明確な判断方法、判断基準が不明確
- PCやスマホ、最近話題のIoTを使っていてどんな問題が発生するのか知りたい
- 会社や組織の情報セキュリティ対策を実施する為の役立つモノを知りたい
- 情報セキュリティ対策は専門業者に任せているから大丈夫、とお考えの場合
- 情報セキュリティ対策は難しい、と感じている場合
- システム開発に携わっており、セキュリティ対策に疑問や不満を感じている方
- 未知の脅威への対策を行いたい方
平成27年度の資料は以下の通りです。本年度の担当講座の内容は大幅に変わります。以前の講座に比べ、IT技術者でも理解不足であることが多いセキュリティ設計の原理と原則をより理解り易く解説します。
通常はEXCELファイルによる申し込みが必要ですが、私の講座に限りメールやメッセージなどで連絡頂くだけでも大丈夫です。途中からの受講でも構いません。お時間がある方は私の講座のみでなく、他の講座も是非受講ください!
-
文字列(ハッシュ)の安全な比較方法 – hash_equals
映画などでPINコードを一桁づつ解析してドアを開錠する、といったシーンがあると思います。こんなのは”映画の世界だけ”と思っている方も多いと思います。しかし、タイミング攻撃を利用すると”実際にこれと全く同じ方法”で鍵となる情報を解析できます。
タイミング攻撃とはサイドチャネル攻撃の一種で、鍵情報を比較的簡単に解析する方法です。PHP 5.6からはタイミング攻撃に脆弱でない比較方法を提供しています。
結論から書くと、秘密の文字列を比較する場合
if ($secret_str !== $user_input) { // ユーザー提供の秘密情報不一致 die('不正なアクセスです'); }といった通常の文字列は比較は危険です。
if (!hash_equals($secret_st, $user_input)) { die('不正なアクセスです'); }上記のようにhash_equals関数を利用しなければなりません。
-
コンピュータは数値さえ正確に扱えない
コンピュータで数値を正確に扱うのは「実は結構難しい」です。つまり「コンピューターは数値を正確に扱えない」という事です。「コンピューターが数値を正確に扱えない?!何を言ってるんだ?!」と思った方は是非読んでみてください。
-
PHPで整数オーバーフロー/アンダーフローをチェックする方法
ユーザーから整数値を受け取った時にその値が整数型の範囲内に収まるか、チェックしたいことがあります。
-
SQL識別子のエスケープ
SQLの識別子(テーブル名やフィールド名)はプリペアードクエリではエスケープできません。最近の開発者はSQLの”パラメーター”には注意を払うようになったので、SQLパラメーターによるSQLインジェクションはかなり少くなってきました。
この結果、相対的にSQL識別子によるSQLインジェクション脆弱性の割合が増えています。実際、私がコード検査を行っているアプリケーションでも識別子が原因でSQLインジェクションに脆弱であるケースが半数くらいになっています。
出力対策はセキュアコーディングの基本の1つです。プリペアードクエリだけでSQLによるインジェクションは防げません。DBMSに限らず、他のシステム(ライブラリも含む。特に文字列をパースする正規表現、XML処理など)にデータを送信する場合、完全に無害化する必要があります。
-
Struts 2の脆弱性でHTTPのContent-Typeヘッダーからリモートコード実行ができる理由
Apache Struts2 の脆弱性対策について(CVE-2017-5638)(S2-045)は
- HTTPプロトコルのContent-Typeヘッダーでリモートからコード実行ができる
という問題です。どうして「Content-Typeヘッダー」でコード実行ができたのか?気になったので調べたメモです。
コード実行ができた理由は「国際化(翻訳)用のメッセージ処理メソッドが、プログラミング言語のようにパースして実行する仕様」であったことでした。気にしていないとこのパターンでリモートコード実行ができてしまうコードも在ると思います。
-
なぜ強い型を持つ言語はセキュリティ的に強いのか? – データ型のバリデーションと構造化されたセキュリティ対策
強いデータ型を持つ言語は弱いデータ型の言語(PHPやJavaScriptなど)に比べよりセキュアなのか?「なぜよりセキュアなのか?」簡単に解説します。
結論から書くと「強いデータ型」はそれだけでは「強いセキュリティ構造」を作るモノではなく、少しだけ安全なコードを書く手助けくらいの効果しか期待できません。安全かつ正しく動作するプログラムを最小のコストで作りたい場合、契約プログラミングを行うのが効果的です。
-
HMACを利用した安全なAPIキーの送受信
Webアプリケーションの機能をサービスとして提供する場合、ランダムな値の秘密のAPIキーを鍵とすることが多いです。
// 何らかのAPIを呼び出す http://example.com/api/v2/get_something?api_key=qwertyuiop
シンプルな方法で使いやすいですが、鍵となるAPIキーをそのまま使っているので鍵が漏洩する可能性があります。HMACやHKDFを使うと鍵となるAPIキーを直接使わないでAPIへのアクセスを認証できます。
-
hash_hmac()の使い方
HMACの応用的な使い方をここ数本のブログで書いてきましたが、HMACの基本的な使い方を紹介していませんでした。リクエストパラメーターを安全に検証/バリデーションする方法を例に紹介します。unserialize()を安全に利用する利用例にもなります。
参考:
https://blog.ohgaki.net/summary-how-to-use-hash_hmac
-
パスワードのハッシュ化
HMACを使った鍵の生成(導出)方法を書いているので、念の為にパスワードのハッシュ化方法について書いておきます。一般にユーザー入力のパスワードをアプリケーションデータベース等に保存する場合、HMACやHKDFを使わずに、password_hash()を使うべきです。
参考:
-
ハッシュ(HMAC)を使って弱い鍵を強い鍵に変える方法
既存の鍵から別の鍵を導出する方式としてはHKDF(RFC 5869)があります。AES用に弱い鍵から強い鍵を作るにはHKDFでなくてもHMACで十分です。実際、HKDFはHMACを組み合わせて鍵を導出しているだけなので、ここで紹介するHMACのみの鍵導出と同等です。
※ PHP 7.2からHKDFを実装したhash_hkdf()を使えます。hash_hkdf()が利用できる場合はシンプルにhash_hkdf()を使うと良いです。
-
ハッシュ(HMAC)を使ってパスワード付きURL/URIを作る方法
より高度なCSRF対策 – URL/URI個別にバリデーションする方法でハッシュ(HMAC)を使えばデータベースを使わずに有効期限付きのURLを作れる、と紹介しました。今回はパスワード付きURL(URI)の作り方を紹介します。
-
ハッシュ(HMAC)を使って有効期限付きURL/URIを作る方法
より高度なCSRF対策 – URL/URI個別にバリデーションする方法でハッシュ(HMAC)を使えばデータベースを使わずに有効期限付きのURLを作れる、と紹介しました。今回は有効期限付きURL(URI)の作り方を紹介します。
