AES CBC模式下的CBC bit flipping Attack
生活随笔
收集整理的這篇文章主要介紹了
AES CBC模式下的CBC bit flipping Attack
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<?xml version="1.0" encoding="utf-8"?> AES CBC模式下的CBC bit flipping Attack
AES CBC模式下的CBC bit flipping Attack
目錄
- 1. 簡介
- 2. 字節翻轉攻擊測試
1 簡介
如果理解了上一篇的padding oracle attack,則CBC字節翻轉攻擊很容易理解,上一篇的最后也通過修改IV達到了修改第一個加密分組數據的效果。 CBC字節翻轉也類似,在有加密IV并可以修改IV值和能獲得服務器返回的明文結果的情況下,就能通過修改IV獲得想要的明文結果。
2 字節翻轉攻擊測試
還以上一節的測試程序為例子。用字節翻轉攻擊修改解密后的明文。
測試請求數據:
def my_dec_req(data):'''測試解密,注意這里使用test_dec函數,直接解密出明文'''txt = b64_url_enc(bytes_to_str(base64.b64encode(data)))return test_dec(txt)test_txt = 'this is a long long test' test1 = test_enc(test_txt) test_data = base64.b64decode(b64_url_dec(test1))# 解密出原始明文 print('decoded text:', my_dec_req(test_data)) decoded text: this is a long long test修改my_dec_req直接解密出明文。
cbc字節翻轉的具體實現:
def data_xor(xs, ys):'''xor兩個序列'''return bytes([x ^ y for (x, y) in zip(xs, ys)])def cbc_xor(data, fake_data, org_data):'''使用cbc xor構造第一個偽造數據 data 加密后的密文,前16字節為iv fake_data 要偽造的明文 org_data 原始明文,只要有前16個字節的明文即可'''data_is = data_xor(data[0:BS], bytes(org_data[0:BS], 'utf-8'))return build_fake_first(data, fake_data, data_is)new_data=cbc_xor(test_data, "admin pass", test_txt)from urllib.parse import quote print("decoded text:", quote(my_dec_req(new_data))) decoded text: admin%20pass%06%06%06%06%06%06ong%20test可以看到前16字節明文被成功替換,不過因為偽造的字符串不夠16個字節,添加了padding:
使用空格代替pkcs7 padding:
def pad_bs_space(s):'''不足一個分組長的字符串 填充空格'''return s + ' ' * (BS - len(s))new_data=cbc_xor(test_data, pad_bs_space("admin pass"), test_txt) print("decoded text:", my_dec_req(new_data)) decoded text: admin pass ong testCreated: 2019-06-21 周五 18:14
轉載于:https://www.cnblogs.com/ntestoc/p/11063894.html
總結
以上是生活随笔為你收集整理的AES CBC模式下的CBC bit flipping Attack的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 04 Websocket和Websock
- 下一篇: ES SOLR对比