GoogleCTF18-DM Collision

類型:Crypto
題目地址:https://github.com/google/google-ctf/tree/master/2018/quals/crypto-dm-col
參考連接:https://github.com/nguyenduyhieukma/CTF-Writeups/tree/master/Google%20CTF%20Quals/2018/Crypto-DM-COLLISION
考察知識點:DES
題目描述:

Can you find a collision in this compression function?

通過代碼閱讀扰藕,可以獲得一些信息:

  • 題目使用了一種近似DES加密的算法,調(diào)換了8個S-box的順序芭挽,其他都沒變
  • 題目需要我們求:
    • 求兩組不同的輸入(key,inputblock) 使input
      block^ outputblock相同,即找到一個沖突
    • 求一組(key,inputblock)使 inputblock==outputblock悲靴,即一個不動點

為了求解這兩個問題屁擅,我們需要先對DES加密做一些介紹妇智。

  1. DES(Data Encryption Standard)是一種塊加密算法,輸入為64位長的明文和64位長的密鑰为狸,輸出長為64位的密文。
  2. 首先會將 輸入的64位明文進行置換并切成兩個長為32位的塊 a[0] a[1]遗契。
  3. 然后遞推計算 a[i+2] = a[i] XOR f(a[i+1], k[i]) for i = 0,1,...,15 f位一個加密函數(shù)
  4. f每次接受一個32位長的待加密塊和48位長的subkey辐棒,來生成一個32位長的新塊
  5. f內(nèi)部會使用s-box 來進行混淆
  6. 最后會對(a[17],a[16])進行逆置換來得到最終的輸出結(jié)果
  7. 盡管DES會接受一個64位長的密鑰做輸入,但其實只有其中的56位會被真正用于加密過程牍蜂,另外8位是用于奇偶校驗的漾根,并不影響加密的結(jié)果。64位長的密鑰將用于生成16個48位長的subkey參與f運算鲫竞。
DES

有了以上知識辐怕,對于要求一,找到一個沖突从绘,我們可以利用7寄疏,密鑰中有一個byte不會對outputblock產(chǎn)生影響是牢,很容易構(gòu)造一對滿足要求的(key, inputblock)。
對于要求二陕截,找到一個不動點驳棱,還需要介紹另外一個知識點。

  • 對于DES來說农曲,有一類很特殊的key社搅,會使得Key scheduler生成16個相同的subkey
  • 具有這種性質(zhì)的key被稱為 weak key
  • 對于DES,所有bit位都為0 的key和 所有bit位都為1的key都是weak key

那么使用weak key會有什么危害呢乳规?
對于DES形葬,當所有的subkey相同時,如果我們要使(a[0], a[1]) == (a[17], a[16])驯妄,可以推出一個充要條件是 a[8] == a[9] 荷并。推導過程如圖。

(a[0], a[1]) == (a[17], a[16]) is equivalent to a[8] == a[9]

對于這道題青扔,改變s-box的順序只會影響f函數(shù)內(nèi)部源织,這個結(jié)論依舊成立。
因此我們可以讓a[8] == a[9] 位任意值微猖,然后復用代碼反推 a[0]和a[1]
具體過程:

檢查是否所有subkey都相同

WEAK_KEY = b'\xff' * 8 # the all ones weak key
L = list(KeyScheduler(Str2Bits(WEAK_KEY)))
S = set(map(tuple, L)) # this will contain only unique element(s).
len(S) == 1

任取一些值給 a[8] a[9]

a = [None] * 18
a[8] = a[9] = Str2Bits(b'c001') # I just want to be c001

倒推所有的a[i]

subkey = S.pop() # get the unique subkey
def f(block): return CipherFunction(subkey, block)

for i in range(10,18):
    a[i] = Xor(a[i-2], f(a[i-1]))

for i in range(7,-1,-1):
    a[i] = Xor(a[i+2], f(a[i+1]))

(a[0], a[1]) == (a[17], a[16])

根據(jù)a[i] 構(gòu)造最終的inputblock

key3 = WEAK_KEY
def InvIP(block): return [block[IP_INV[i] - 1] for i in range(64)]
block3 = Bits2Str(InvIP(a[0] + a[1]))
DESEncrypt(block3, key3) == block3

即構(gòu)造出了符合要求二的一組(key,inputblock)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谈息,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凛剥,更是在濱河造成了極大的恐慌侠仇,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犁珠,死亡現(xiàn)場離奇詭異逻炊,居然都是意外死亡,警方通過查閱死者的電腦和手機犁享,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門余素,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炊昆,你說我怎么就攤上這事桨吊。” “怎么了凤巨?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵视乐,是天一觀的道長。 經(jīng)常有香客問我敢茁,道長佑淀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任卷要,我火速辦了婚禮渣聚,結(jié)果婚禮上独榴,老公的妹妹穿的比我還像新娘。我一直安慰自己奕枝,他們只是感情好棺榔,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隘道,像睡著了一般症歇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谭梗,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天忘晤,我揣著相機與錄音,去河邊找鬼激捏。 笑死设塔,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的远舅。 我是一名探鬼主播闰蛔,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼图柏!你這毒婦竟也來了序六?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蚤吹,失蹤者是張志新(化名)和其女友劉穎例诀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裁着,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡繁涂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了二驰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爆土。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诸蚕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氧猬,我是刑警寧澤背犯,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站盅抚,受9級特大地震影響漠魏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妄均,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一柱锹、第九天 我趴在偏房一處隱蔽的房頂上張望哪自。 院中可真熱鬧,春花似錦禁熏、人聲如沸壤巷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胧华。三九已至,卻和暖如春宙彪,著一層夾襖步出監(jiān)牢的瞬間矩动,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工释漆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悲没,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓男图,卻偏偏與公主長得像示姿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子享言,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容