拆解 IBM i 的 QSYRUPWD:從 SCV 指令一路還原出密碼雜湊鏈
Silent Signal Blog · 2026-07-28
匈牙利資安公司 Silent Signal 的研究員 pz,在 2026 年 7 月 28 日發表文章,公開了他如何逆向 IBM i(前身為 AS/400)系統中 QSYRUPWD(Retrieve Encrypted User Password)這支 API 的內部加密流程。這支 API 原本是給系統管理用途,例如密碼同步、帳號搬遷與複寫,讓具備高權限的呼叫者取出「加密後」的密碼資料。pz 透過追蹤系統呼叫與反組譯,重建出其中串接的五道加密運算,最終證明只要具備 *ALLOBJ 與 *SECADM 權限,就能把這些加密輸出轉換成可離線暴力破解的雜湊格式。
研究方法:從追蹤工具到暫存器讀值
pz 的做法分成幾個階段。他先用 IBM i 內建的 STRTRC 追蹤工具,觀察呼叫 QSYRUPWD 時系統內部實際觸發了哪些函式。接著透過系統服務工具(SST)把 QSYMIUTLS、QSYCODEUTL、QZLSRTPW、QSYRUPWD 這幾支服務程式的組合語言取出來逐行比對。
最關鍵的一步是找到 SCV 10(Supervisor Call Vectored)指令搭配功能編號 346,這正對應到 MI(Machine Interface)層級的 CIPHER 加密函式。pz 為了看清楚每次呼叫前後的暫存器與記憶體內容,還自己在關鍵位置插入無窮迴圈當作中斷點,再用除錯器逐一檢視傳入的金鑰與明文。他用多組不同密碼特性的使用者帳號重複驗證,確保推導出的邏輯不是巧合。
逆向出的加密鏈:五道 CIPHER 運算
整個流程橫跨兩支服務程式。QZLSRTPW 階段負責準備素材:先對 EBCDIC 編碼、補滿 10 位元組的使用者名稱做 SHA-1,再做一次 MD5,第三步則用使用者名稱與舊版 DES 密碼值推導出的 32 位元組金鑰,以 Rijndael-256 CBC 模式加密密碼素材。
QSYRUPWD 階段則負責產生最終輸出:先對一個 1,972 位元組的組合緩衝區(含使用者情境與密碼資料)做 SHA-1,再用 AES-128 ECB 模式分別加密 DES 欄位與 SHA-1 欄位,最後用 Rijndael-256 CBC 模式加密 NT 雜湊。整理如下表:
| 階段 | 演算法 | 區塊大小 | 模式 | 金鑰長度 |
|---|---|---|---|---|
| QZLSRTPW 第 3 道 | Rijndael | 256-bit | CBC | 256-bit |
| QSYRUPWD 第 2、3 道 | AES | 128-bit | ECB | 128-bit |
| QSYRUPWD 第 5 道 | Rijndael | 256-bit | CBC | 256-bit |
32 位元組金鑰結構
文章裡最花篇幅的一段,是還原出那把由使用者名稱與舊版 DES 密碼值推導出的 32 位元組金鑰材料。這把金鑰不是隨機產生,而是靠一套排序規則拼湊出來:
5 個 0x00 位元組
+ DES 值中所有小於 0x40 的位元組(依序排序後)
補滿至固定長度,剩餘位置填 0x40
+ 固定標記 0x44
+ 去除空白的使用者名稱
與 DES 值中大於等於 0x40 的位元組排序組合如果密碼長度超過 8 個字元(代表沒有對應的舊版 DES 值),這個欄位就整段換成 0x40 填充。這個規則本身沒有寫在任何公開文件裡,是 pz 靠反覆比對記憶體 dump 湊出來的。
影響範圍:能還原出哪些雜湊
解密之後,pz 拿到三種可離線破解的密碼表示形式:16 位元組的 NT Hash(即 MD4(UTF-16LE(密碼)))、8 位元組的舊版 DES 衍生值,以及 20 位元組的 SHA-1 中介值。既有的 John the Ripper 格式 as400_des 與 as400_ssha1 只支援舊版密碼等級(QPWDLVL 0-1),對 2 到 4 等級完全沒轍,這也是這篇研究的實用價值所在。
以 RTX 4090 估算破解速度,NTLM 可以跑到 288.5 GH/s,但 PBKDF2-SHA1(1,000 次疊代)只有 19.12 MH/s,慢了約 15,000 倍;若疊代數提高到 10 萬次,速度會再掉到約 200 kH/s。換句話說,拿到 NT Hash 的攻擊者破解成本遠低於拿到正確配置的 PBKDF2 雜湊。pz 在文中沒有提到對應 CVE 編號,也未提及 IBM 官方回應,他建議的緩解方向,是重新設計 QSYRUPWD 的輸出格式,讓管理端拿到的資料本身就無法被轉換成可離線破解的雜湊。
Claude 花三天生成上億 token,把 HAWK-256 金鑰安全打對折
Anthropic Research · 2026-07-28
Anthropic 在 2026 年 7 月 28 日發布研究報告,說明其內部模型(代號 Claude Mythos Preview)在半自主與全自主的密碼分析任務中,找到了針對後量子簽章方案 HAWK 的改良金鑰復原攻擊,以及縮減輪數 AES-128 的新型中間相遇攻擊。研究團隊同時釋出技術論文與展示程式碼,並與 ETH Zurich 及以色列多所大學合作建立了名為 CryptanalysisBench 的密碼分析基準測試集。
HAWK-256 攻擊:兩名 worker agent 的協作
HAWK 是 NIST 後量子簽章標準化「Additional Digital Signatures」第三輪唯一入選的格基(lattice-based)方案,安全性建立在格同構問題(Lattice Isomorphism Problem)上,標準參數組是 HAWK-512 與 HAWK-1024。研究團隊針對其中的 HAWK-256 參數集,採用半自主的多 worker 協作架構,由背景是理論電腦科學、並非格密碼學專家的操作者帶領,搭配 Python 與 Sage 數學軟體,在沙盒環境中跑了約 60 小時。
關鍵突破來自兩個 worker agent 之間的協作,其中一個發現了 HAWK 格結構裡的一個非平凡自同構(nontrivial automorphism),另一個則把這個發現轉換成實際可用的攻擊步驟。最終結果是把 HAWK-256 的有效金鑰長度砍半,預期攻擊成本從 2^64 降到 2^38。這次任務總共花費約 10 萬美元的 API 費用,攻擊已在今年 6 月私下知會方案作者完成協調揭露。
AES 縮減版攻擊:被激將出來的成果
另一條研究路線是針對 AES-128 縮減到 7 輪(完整版是 10 輪)的變種,採用幾乎全自主的 scaffolding 框架運作。研究人員一開始得到的結果並不理想,Claude 甚至直接判定「這個改進是不可能的」。研究人員只寫了三段實質提示,其中一句是「模型往往覺得這不可能做到,所以乾脆不去嘗試」,鼓勵模型繼續嘗試不同方向。
接下來三天,Claude 生成了數億個 token,最終逼近十億輸出 token 才收斂出可用的攻擊。新方法被命名為「Möbius Bridge」指紋演算法,用在中間相遇攻擊上,在選擇明文的威脅模型下,比先前最佳結果快了 200 到 800 倍。這次任務同樣花費約 10 萬美元 API 費用,而人工驗證正確性則耗費了超過 200 個研究員工時。研究人員曾記錄下 Claude 抗拒任務時的原話:「如果你想要不同的結果,目標本身就得改變……AES-128 r5/r6 就是真的很難。」
其他成果與影響範圍
報告中還提到幾項附帶成果:針對 LEA 密碼的 13 輪實用攻擊,所需已知明文從 2^98 降到不到 2^30,可在一小時內執行完畢;針對 6 輪 Serpent-128 的完整金鑰復原;以及在 Salsa20、Poseidon、SHA-1 上的小幅改進。
HAWK-256:攻擊成本從2^64降至2^38,已完成協調揭露AES-128(7 輪縮減版):速度提升 200-800 倍LEA(13 輪):所需明文量從2^98降至2^30以下
報告特別強調,這兩項攻擊都不影響任何生產系統:HAWK 標準參數組依然安全,攻擊成本仍是指數等級;AES-128 完整版(10 輪)也未受影響,結果只適用於縮減輪數的研究變種。GitHub 上的 cryptography-research-demo 倉庫作為研究附件釋出,分成 AES、HAWK、LEA 三個獨立目錄,標註為不再維護、不接受外部貢獻的存檔性質專案。
原始來源:Anthropic: Discovering Cryptographic Weaknesses with Claude、GitHub: cryptography-research-demo
htmx 4.0 大動刀:拔掉 XMLHttpRequest,換上原生 fetch()
htmx 官方文件 (four.htmx.org) · 2026-07-27
htmx 專案在 2026 年 7 月 27 日釋出 4.0 版的公開文件站 four.htmx.org,這是這個以「回傳 HTML 而非 JSON」聞名的前端函式庫,自 2.x 系列以來最大的一次架構調整。這次改版的核心動作,是把過去為了相容 IE 而保留的 XMLHttpRequest 整條抽換成原生 fetch() API,官方文件明白寫著「所有請求都改用原生 fetch(),且無法回退」。連帶著歷史導覽、屬性繼承、錯誤處理等機制也一併重寫。
核心改動:請求層與歷史系統重寫
過去 htmx 的瀏覽器歷史(history)支援,是把 DOM 快照存進 sessionStorage,使用者按上一頁時再把快照還原回頁面。4.0 版整個拿掉這套機制,改成每次導覽到歷史節點時,一律重新發出完整頁面請求。官方說法是這樣「更不容易出錯、更萬無一失」,同時也順便解決了把歷史狀態存在可存取儲存空間裡的資安疑慮。
錯誤處理的預設行為也整個翻轉了:以前 4xx、5xx 的回應預設不會被拿去替換畫面內容,4.0 版變成「除了 204 與 304 之外的所有 HTTP 回應都會被替換」。這代表凡是原本依賴「錯誤回應不動作」這個假設寫的畫面邏輯,升級後都得重新檢查。
屬性與事件:從隱式繼承走向顯式宣告
屬性繼承模式從隱式改成顯式,子元素不會再自動繼承父層屬性,而是要顯式加上 :inherited 修飾詞,例如把原本靠繼承生效的設定改寫成:
<div hx-confirm:inherited="Are you sure?">
...
</div>幾個常用屬性也被重新命名,對照關係如下:
hx-disable→hx-ignorehx-disabled-elt→hx-disablehx-vars→hx-valshx-ext屬性整個移除,擴充套件改為直接用<script>載入
事件命名也統一改成「階段:動作[:子動作]」的格式,原本分散的多個錯誤事件,現在統一收斂成一個 htmx:error。
新特性與影響範圍
4.0 版也加入幾項新能力。hx-status:XXX 屬性讓開發者可以依照 HTTP 狀態碼分別指定不同的替換行為;新的 innerMorph、outerMorph 替換樣式,能在更新 DOM 時智慧保留既有狀態,像是讓影片播放或表單焦點不因局部更新而中斷;<hx-partial> 元素則讓單一回應可以顯式指定多個目標,各自套用不同的替換策略。
htmx 團隊也提供升級檢查工具與 htmx-2-compat 相容擴充套件,讓專案可以逐步遷移。核心的 hypermedia 哲學沒有變:伺服器依然回傳 HTML 而非 JSON,透過 HATEOAS(Hypertext As The Engine Of Application State)的方式,由伺服器端決定使用者實際看到的畫面內容,而不是把狀態管理邏輯下放到前端。GitHub 上的 CHANGELOG.md 目前僅更新到 2.0.10,4.0 的完整條目與正式 GitHub Release 尚待補上,升級細節目前仍以 four.htmx.org 文件站為準。