レッスン 1-3
長さ拡張攻撃を
読み終えたらただの
この頁の流れ
秘密の
出典を確かめた日 2026年10月27日
なぜ通るのか
取引先から
秘密を
ハッシュと
長さ拡張攻撃
SHA-256 は、
その
HMAC は何を変えたか
HMAC は、
| 段 | 何をするか |
|---|---|
| 内側 | 鍵に |
| 外側 | 鍵に |
外に
改ざん検知の符号と署名の違い
HMAC は、
| 方式 | 鍵 | 向く所 |
|---|---|---|
| HMAC | 両者が | 2 者の |
| 署名 | 付ける | 多くの |
署名で
脆いコードと直したコード
ラボの
ハッシュに秘密をつなぐか、HMAC を使うか
Python
def verify(secret, body, sig):
mac = hashlib.sha256(
secret + body).hexdigest()
return mac == sigPython
def verify(secret, body, sig):
mac = hmac.new(
secret, body,
hashlib.sha256).hexdigest()
return hmac.compare_digest(mac, sig)直した== はcompare_digest を
印の方式をトークンから読むか、こちらで決めるか
Python
def read_token(token, key):
alg = jwt.get_unverified_header(
token)["alg"]
return jwt.decode(
token, key, algorithms=[alg])Python
def read_token(token, public_key):
return jwt.decode(
token, public_key,
algorithms=["RS256"])JWT は、
ログでの見え方と検知
印の
記録
webhook signature mismatch
sender=shop-a status=401ふだん、
| 見る物 | なぜ効くか |
|---|---|
| 送り手ごとの | 急に |
| 受け入れる | 「none」や |
| コードの | sha256(secret + ...) の |
| 署名の | 退役したはずの |
最後の
直し方と、直ったことの確かめ方
自分の
- 作業用の
フォルダに、脆い verifyと、それを 呼ぶ 小さな 受け口の 関数を置く - ラボ用の
秘密の 値で 本文に 印を 付け、脆い verifyが通す ことを 確かめる - 関数を
直した コードに 置き換え、 同じ 本文と、 HMAC で 付け直した 印で 通る ことを 確かめる - 下の
試験を 足す。 1 つ目は RFC 4231 の 試験用の 値で、 HMAC-SHA256 を 正しく 計算している ことを固める - 直す前の
コード (つないで ハッシュ) に 戻すと、 1 つ目の 試験が 落ちる ことも 確かめる - 終わったら、
作業用の フォルダごと消す
Python
KEY = b"Jefe"
MSG = b"what do ya want for nothing?"
MAC = ("5bdcc146bf60754e6a04242608"
"9575c75a003f089d2739839dec"
"58b964ec3843")
def test_rfc4231_vector():
assert verify(KEY, MSG, MAC)
def test_tampered_body():
bad = MSG + b"!"
assert not verify(KEY, bad, MAC)試験は
あわせて、
関わる事例
2023年夏、
SolarWinds の
- 2023年6月15日、
クラウドメール・ Storm-0558 に認証基盤 よる 入口 2016年にMicrosoft Exchange Online 侵入 発行された 消費者向け(MSA)の 署名鍵が、 本来2021年3月に 失効する 予定だったが 延期されたまま 有効な 状態で 残っており、 何らかの 方法で 盗まれた - 2020年12月12日、
IT 管理 SolarWinds Orion のソフトウェアと その 利用組織 (政府機関、 重要インフラ、 民間企業) サプライチェーン 入口 攻撃者は侵害 資格情報を 盗んで SolarWinds の 開発環境と 社内の 仕組みに 入り込んだ。 最初に 入った 経路は 特定されておらず、 会社は 第三者の 製品の 未知の 脆弱性、 パスワードスプレーなどの 総当たり、 標的型の フィッシングなどの ソーシャルエンジニアリングの 3つを 有力な 候補に 挙げている
確認クイズ
1 問目
通知の
答えだと思う選択肢を押すと、その場で正誤と理由が開きます。
答え ア
SHA-256 は
2 問目
JWT を
答えだと思う選択肢を押すと、その場で正誤と理由が開きます。
答え イ
トークンの
説明課題
次の
- ただの
ハッシュで 改ざん検知の 符号を 作ってはいけない 理由
模範解答を見る
SHA-256 のような
一次資料
どれも
- RFC 2104 HMAC Keyed-Hashing for Message Authentication (IETF、
英語、 。1997年2月) ipad と opad を 使った 内側と 外側の 2 段の計算 - RFC 4231 Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512 (IETF、
英語、 。2005年12月) 試験に 使った 鍵 Jefe と 本文、 HMAC-SHA-256 の値 - hmac Keyed-Hashing for Message Authentication (Python の
説明書、英語) 。外から 届いた 印と 比べるときは compare_digestを使い、 時間の 差による 推し量りを 減らすこと - RFC 8725 JSON Web Token Best Current Practices (IETF、
英語、 。2020年2月) none への 書き換えと、 公開鍵の 方式から HMAC の 方式への 書き換えの 攻撃、 受け入れる 方式を 呼ぶ側が 決めること - Review of the Summer 2023 Microsoft Exchange Online Intrusion (米 サイバー
安全審査委員会、 。英語、 2024年3月20日) 2016年に 作った 署名の 鍵、 企業向けにも 通った こと、 2021年3月の 退役の 延期、 自動の 入れ替えを 後回しにした判断 - AA20-352A Advanced Persistent Threat Compromise of Government Agencies, Critical Infrastructure, and Private Sector Organizations (CISA、英語)。
手を 加えた 部品が 正規の コード署名の 証明書で 署名されたこと
次へ
次の
