aes 密文長度 AES加密的安全問題

2021-10-17 07:37:06 字數 2850 閱讀 7909

aes加密簡介

aes演算法全稱advanced encryption standard,是des演算法的替代者,旨在取代des成為廣泛使用的標準,於2023年11月26日發布於fips pub 197,並在2023年5月26日成為有效的標準。2023年,高階加密標準已然成為對稱金鑰加密中最流行的演算法之一。

aes是典型的對稱加密演算法,對稱加密不同於md5 sha的雜湊摘要演算法,對稱加密是可逆的,通常是明文+金鑰,再利用演算法來加密成密文,如果要還原也很簡單,只要根據金鑰+密文+生成演算法的逆運算,即可解出,對稱加密特點為可逆,並且加密解密都是使用同乙個金鑰,而非對稱加密則是公鑰私鑰加解密模式這裡不做討論。

aes加密五種模式

aes加密的方式有五種工作體制。

1.電碼本模式(electronic codebook book (ecb))

這種模式主要是將明文劃分為幾個明文段,分塊加密,但是加密金鑰是相同的。

2.密碼分組鏈結模式(cipher block chaining (cbc))

這種模式是先將明文切分成若干小段,然後每一小段與初始塊或者上一段的密文段進行異或運算後,再與金鑰進行加密。

3.計算器模式(counter (ctr))

4.密碼反饋模式(cipher feedback (cfb))

5.輸出反饋模式(output feedback (ofb))

其中分組如,aes-128-ecb即為16位元組為一組,16位元組即為128位。

其他三種模式較為複雜,本文僅討論前兩種加密的安全性。

aes-ecb加密

aes-ecb加密是將一段明文,按照固定長度分組,然後對每乙個分組,按照演算法使用固定的金鑰進行加密。假設123456加密。那麼123為一組加密,456為一組加密,然後兩段明文加密後的密文拼在一起,就算完整的密文。

注意:這裡每一組的加密都是使用相同的金鑰,相同的演算法,所以在這種機制下,很可能出現安全問題。

比如:在身份認證中,查詢使用者是否是管理員還是普通使用者,如果is_root=1則為管理員,如果不為1則為普通使用者,如果採用aes-ecb加密,對原文進行分組加密。

明文:user_id:1.000000 is_root:0(其中is_root來判斷是否為管理員。) 然後用一段金鑰加演算法進行加密。
第一組:is_user 第二組:1.000000 第三組: is_root: 第四組: 0(不夠的八位自動填充)其中user_id 通常情況下我們前端可以修改,進行修改為1.000000,此時原文被加密之後為四組 每組為八個數字的密文假設加密後密文為 c4ca4238a0b923820dcc509a6f75849b 在cookie中被提交,將密文分為四組c4ca4238a0b923820dcc509a6f75849b
此時密文我們是可控的,如果正常提交,伺服器解密之後為user_id:1.000000 is_root:0,很顯然我們不是管理員,但是如果將第二組密文和第四組密文替換呢,那麼user_id就是0,is_root就是1.000000。伺服器就解析為user_id:0******x(xx為填充字元) is_root:1.000000,顯然我們不需要知道金鑰,同樣可以進行繞過。

還有一則在轉賬中,如果採用aes-128-ecb加密,在cookie中使用ecb分組加密,比如

付款人賬戶:

*** //假設密文abc

收款人賬戶:

*** //假設密文efg

試想一下,一旦這個分組是剛好分為四組,我們僅僅將abc與efg交換,那不就造成了支付收款反轉,幾乎不需要什麼技術就可以造成嚴重的攻擊。

ctf-案例

接下來以真實題目來進行詳解。

ctf address:國外的一道ctf)

首先嘗試輸入admin admin 登陸。

返回內容重點為紅色框內的東西,需要使得第三個引數 is_admin=1即可獲得flag,但是session cookie並不是這個題關注的點,接下來就是抓包分析引數。修改引數。

經測試修改url,get cookie post傳參都不能改變is_admin的值,所以只有一種可能,是在cookie裡的user引數裡加密了,然後傳遞給伺服器,我們get引數傳入的賬號密碼被伺服器端加密,然後伺服器返回來加密後的user資訊。

接下來測試是何種加密,測試為aes-ecb加密,那麼是如何確定的呢,由於ecb是分組加密,所以一旦一組的密文我們修改了,其他組的密文解密之後是正常的,而被我們修改了的密文解密會是亂碼,所以我們隨便修改下user引數。

可以看到報錯,並且第一組的密文解密後是亂碼,而其他組的加密解密後為正常,所以猜測這一定是aes-ecb的分組加密的方式,此時,我們應該先確定分組,幾個為一組,先破壞第一組加密然後破壞第二組加密,然後確定解密後json資料為,

{"first_name":"admin

Tcp的AES加密和AES 解密

下面的引數str就是tcp需要傳輸的內容 金鑰就是加密和解密需要提供一組相同的字元 加密模式 填充方式 將目標字串進行aes加密 iv和key均為secretkey 被加密字串 秘鑰 加密模式 填充方式 public static string toencryptaes this string st...

AES 的加密操作

author vivid param ssrc 加密data param skey 加密金鑰 param ivstr 加密向量 description 加密操作 public static string encrypt string ssrc,string skey,string ivstr thr...

AES加密的坑

其實不應該算aes加密的坑,而是加密後使用的坑 正常的加密應該是 data openssl encrypt input,aes 256 cbc this key,openssl raw data,this hex iv 返回給使用者使用還要base64編碼,base64 encode data 就是...