日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

密码学的安全性浅析-1

發(fā)布時(shí)間:2023/12/16 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 密码学的安全性浅析-1 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊藍(lán)字

關(guān)注我們

前言

我們一直都在說,密碼學(xué)是網(wǎng)絡(luò)空間安全領(lǐng)域的唯一理論支撐,大家都認(rèn)為密碼學(xué)是安全的壓艙石。

密碼學(xué)對(duì)安全的關(guān)鍵意義毋庸諱言,安全領(lǐng)域非密碼學(xué)的師傅們而言,對(duì)于密碼學(xué)的認(rèn)識(shí)可能限于打CTF時(shí)接觸的基礎(chǔ)的凱撒密碼、柵欄密碼到涉及分析的padding oracle attack等,再到要讀最新的論文手動(dòng)編程才能求解的一些問題。

大家對(duì)密碼學(xué)的安全性問題了解并不足夠,本系列文章核心來自我們?cè)趯W(xué)習(xí)相關(guān)文獻(xiàn)時(shí)的學(xué)習(xí)記錄,整理成文希望能夠提升大家對(duì)”壓艙石“安全性的認(rèn)識(shí)。

具體而言,在本篇文章中,我們會(huì)介紹密碼學(xué)的安全性的定義、如何保證安全性;之后會(huì)介紹古典密碼及其本質(zhì)的缺陷,然后引出一次一密;接著會(huì)定義攻擊模型及安全目標(biāo),并通過分析引出隨機(jī)性的重要性,為了便于理解,在文中會(huì)時(shí)刻舉例說明,同時(shí)給出實(shí)際中由于對(duì)密碼學(xué)安全性理解不足而發(fā)生過的安全事故。

安全性

密碼學(xué)中的安全性與計(jì)算機(jī)中的安全性是存在區(qū)別的。

計(jì)算機(jī)安全,我們以軟件安全為例,其目標(biāo)是防止攻擊者利用程序代碼觸發(fā)漏洞,而密碼學(xué)安全的目標(biāo)是使定義明確的問題無法求解。對(duì)于軟件安全而言,一個(gè)軟件要么是安全的,要么是不安全的,但是對(duì)于密碼領(lǐng)域的程序而言,安全與否并不是絕對(duì)的,我們可以計(jì)算出破解加密算法所需的工作量,即量化其安全性,但是卻不能絕對(duì)稱其為安全。

密碼學(xué)中的安全性可以分為兩種:理論安全性與計(jì)算安全性。當(dāng)攻擊者擁有無限時(shí)間和資源還是不能破譯密碼時(shí),稱其為理論安全,也叫做無條件安全,下文會(huì)介紹的一次一密便是典型;而如果一個(gè)密碼算法在給定時(shí)間和資源內(nèi)無法被攻破,則稱其為計(jì)算安全的,這與攻擊者的能力、目標(biāo)等條件密切相關(guān),在下文我們會(huì)根據(jù)不同的條件建立不同的攻擊模型與安全目標(biāo)等。

舉個(gè)例子,設(shè)一個(gè)密碼算法E的密鑰K是128比特,加密過程為C=E(K,P),已知一個(gè)明文-密文對(duì)(P,C),但是不知道K。

求K,這個(gè)問題不是理論安全的,因?yàn)槲覀兛梢愿F舉2^128種可能;但是這個(gè)問題是計(jì)算安全的,因?yàn)榧词挂幻腌娍梢愿F舉1000億個(gè)K,要窮舉

2^128個(gè)K要花費(fèi)超過100 000 000 000 000 000 年的時(shí)間,在實(shí)踐中是安全的。

形式化及度量

我們這里可以給出形式化的定義,設(shè)對(duì)于一個(gè)密碼方案,攻擊者最多能執(zhí)行t個(gè)操作,攻擊成功概率不高于ε,則該方案是(t,ε)-安全的,此時(shí)給出的是破解密碼算法的難度的下限。注意,這意味著,沒有攻擊者能夠在執(zhí)行小于t次操作得情況下,獲得概率為ε的成功率,但是這并不是說明攻擊者執(zhí)行t次就恰好可以成功,也不會(huì)說明需要具體多少次才能成功,所以t實(shí)際上是攻擊算法所需的操作量的下界。

還是以攻擊128比特密鑰的對(duì)稱密碼算法為例,理想情況下,此密碼對(duì)于1到2^128之間的任何t值都是

(t,2/2^12)-安全的,最好的攻擊就是暴力破解。我們可以計(jì)算以下三種可能的攻擊的成功概率:

1.t=1,說明攻擊者嘗試了一個(gè)密鑰,并以ε=1/2^128的概率成功

2.t=2^128,說明攻擊者嘗試了所有密鑰,其中一定有一個(gè)是成功的,所以成功概率ε=1

3.t=2^64,此時(shí)的成功概率ε=

2^-64,也就是說,攻擊者嘗試所有密鑰的一小部分時(shí),成功概率與嘗試的密鑰數(shù)量成正比。

從這個(gè)例子我們可以看出,對(duì)于1到2^n比特之間的任意t,一個(gè)n比特密鑰的密碼至多是

(t,t/2^n)-安全的,因?yàn)闊o論密碼多強(qiáng)大,暴力破解總是可以成功的,實(shí)際中的關(guān)鍵就是在于能夠抵抗暴力攻擊多久。

我們可以對(duì)(t,ε)-安全進(jìn)一步簡(jiǎn)化。我們說當(dāng)攻擊成功至少需要t次操作時(shí),稱其為t-安全,這里我們實(shí)際上假設(shè)ε是接近1的概率,通過比特表示安全性,”n比特安全“說明攻破它需要2^n次操作。

而直到操作次數(shù)后,我們就可以通過取其對(duì)數(shù)確定其安全強(qiáng)度。假設(shè)需要1000000次操作,則其安全強(qiáng)度為log2 1000000=20比特。

其他因素

雖然比特安全性在比較不同密碼的安全強(qiáng)度時(shí)很有用,但是其沒有提供足夠的關(guān)于攻擊成本的信息,僅僅通過比特安全性并不能說明什么,比如兩個(gè)密碼都有128比特密鑰和128比特安全性,但是第一個(gè)密碼比第二個(gè)快100倍。那么實(shí)際上對(duì)第二個(gè)密碼進(jìn)行暴力破解2^128次時(shí),可以對(duì)第一個(gè)密碼做

100x2^128次操作了,如果我們以第一個(gè)快密碼為標(biāo)準(zhǔn),那么破解慢密碼需要

2^134.64次操作。

那么,這能夠說明第二個(gè)密碼比第一個(gè)密碼安全嗎?當(dāng)然不行,所以我們還需要考慮其他因素。

并行性

設(shè)有兩個(gè)攻擊,每個(gè)攻擊都需要2^56次操作,第一種攻擊只能串行,第二種攻擊可以并行。假設(shè)我們有

2^16=65536個(gè)處理器,那么可以將并行工作的負(fù)載分成65536個(gè)獨(dú)立任務(wù),每個(gè)任務(wù)只需要執(zhí)行

2^40次操作即可。

也就是說,即使并行攻擊和順序攻擊執(zhí)行相同數(shù)量的操作,但是并行攻擊比順序攻擊快65536倍。

內(nèi)存

這實(shí)際上和攻擊所用的空間成本有關(guān),即攻擊需要多次內(nèi)存查找、內(nèi)存訪問速度、訪問數(shù)據(jù)大小等,這些對(duì)時(shí)間的影響非常關(guān)鍵。例如在當(dāng)前的CPU上,從寄存器讀數(shù)據(jù)需要1個(gè)周期,從CPU緩存讀數(shù)據(jù)需要20個(gè)周期,從DRAM讀數(shù)據(jù)需要100個(gè)周期。

預(yù)計(jì)算

這一般被稱作攻擊的離線階段,這些操作只需要執(zhí)行一次,在后面的攻擊中就可以重復(fù)使用。比如彩虹表破解hash就是這一類,雖然在計(jì)算彩虹表進(jìn)行預(yù)計(jì)算時(shí)會(huì)花費(fèi)大量時(shí)間,但是在實(shí)際攻擊過程中很快就可以實(shí)施。

目標(biāo)數(shù)量

攻擊目標(biāo)數(shù)量越多,攻擊面就越大,攻擊者就可以拿到更多關(guān)于密鑰的信息。舉個(gè)例子,設(shè)目標(biāo)為n比特的密鑰,需要2^n次嘗試才能找到正確的密鑰,但如果攻擊目標(biāo)為多個(gè)n比特密鑰,即對(duì)于單個(gè)明文P,攻擊者有M個(gè)不同的密文,其分別用M個(gè)n比特密鑰加密得到。如果攻擊者要破解的是M個(gè)密鑰中的每一個(gè),那么還是需要

2^n次操作,但是如果只需要破解M個(gè)中的一個(gè),那么只需要

2^n/M次操作。

也就是說,攻擊成本隨著目標(biāo)數(shù)量增加而降低。

安全性證明

要評(píng)估某密碼算法的安全性,我們一般會(huì)通過數(shù)學(xué)證明得到。

在密碼學(xué)中其被稱為可證明安全性,它可以證明某個(gè)密碼方案至少和解決另一個(gè)已知的困難問題是同等困難的,只要困難問題仍然存在,那么方案就是安全的,這種證明方式被稱為規(guī)約,其來自復(fù)雜性理論。

安全性證明根據(jù)其所使用的困難問題的類型,可以分為兩種:與數(shù)學(xué)問題相關(guān)、與密碼問題相關(guān)。

與數(shù)學(xué)問題相關(guān)

破解這類方案至少與解決一些數(shù)學(xué)難題一樣困難。

密碼學(xué)中一個(gè)著名的數(shù)學(xué)難題就是大數(shù)分解,RSA正是依賴于它。RSA通過計(jì)算C=p^e mond n來加密明文p,其中,e和大數(shù)n=pq是公鑰。

通過P=c^d mond n解密,其中d是和e、n有關(guān)的私鑰。

如果我們可以分解n,那么就可以從公鑰中恢復(fù)私鑰來破解RSA;如果有私鑰,就可以分解n。

換句話說,恢復(fù)RSA私鑰和分解大數(shù)n是等價(jià)的困難問題,這就是我們所說的歸約。

與密碼問題相關(guān)

這類方案是與另一個(gè)密碼方案比較,并證明只有破解第一個(gè)密碼方案時(shí),才能破解第二個(gè)密碼方案。對(duì)稱密碼的安全性證明常用這種方式。

不過可證明安全性并不適用于所有類型的算法,有一些密碼算法并沒有被證明是安全的,如AES,AES不能規(guī)約到一些眾所周知的難題,既不與數(shù)學(xué)問題相關(guān),也不與密碼問題相關(guān),而我們之所以還用AES,是因?yàn)樵S多專家嘗試破解它但是失敗了。此時(shí)的安全性證明,我們成為啟發(fā)式的:密碼分析人員分析多輪后,密碼算法的安全冗余還是很高,我們就相信它是安全的。

錯(cuò)誤的安全性證明

我們已經(jīng)說了安全性證明非常重要,但是密碼學(xué)大佬們?cè)谶M(jìn)行安全性證明時(shí)仍然有可能犯錯(cuò),對(duì)于OAEP的證明就是一個(gè)典型例子。OAEP是一種使用RSA實(shí)現(xiàn)安全加密的方法,在許多應(yīng)用程序中使用,OAEP給出的安全性證明中聲稱其抵抗選擇密文攻擊的有效期為7年,但是后來大家研究發(fā)現(xiàn)證明是錯(cuò)誤的,給出的結(jié)論也是錯(cuò)誤的。之后給出了新的證明,結(jié)論是OAEP對(duì)選擇密文攻擊是安全的。

古典密碼

古典密碼是計(jì)算機(jī)發(fā)明之前的密碼,算法作用在字母上而不是比特位上。古典密碼中最經(jīng)典的就是凱撒密碼和維吉尼亞密碼,二者的基礎(chǔ)知識(shí)背景這里不再介紹。

凱撒密碼

凱撒密碼容易被破解,只需要把密文往前移動(dòng)3位即可得到響應(yīng)的明文。這種方式安全程度非常低,在古羅馬時(shí)期經(jīng)常被使用,不過實(shí)際上,前些年意大利警方還通過破譯一種凱撒密碼的變種抓到了黑手黨頭目。要增強(qiáng)凱撒密碼的安全性,可以改變移位的位數(shù),不過即使這么做了,攻擊者最多嘗試25次也就可以解密了。

維吉尼亞密碼

維吉尼亞密碼雖然比凱撒密碼安全了很多,但還是容易被攻破。

舉個(gè)例子,明文“THEY DRINK THE TEA"通過密鑰”DUH“加密后的密文為”WBLBXYLHRWBLWYH“

第一步找出密鑰的長(zhǎng)度。我們注意到密文中WBL出現(xiàn)了2次,間隔9個(gè)字母,這意味著相同的3個(gè)字母被用同樣的移位模式加密,所以密鑰長(zhǎng)度要么是9,要么能夠整除9.而在英語中,THE是最常出現(xiàn)的3個(gè)字母的組合,所以我們可以認(rèn)為這個(gè)重復(fù)的3個(gè)字母為THE,那么可能的密鑰就是DUH.

第二步使用頻率分析法找出字母分布的不均勻性。在英語中E是最常見的字母,所以如果密文中X出現(xiàn)次數(shù)最多,那么X對(duì)應(yīng)的明文很可能就是E

工作原理

通過上面對(duì)兩種古典密碼的簡(jiǎn)單分析,我們已經(jīng)知道密碼的工作原理主要就是置換和模式。

置換是指能夠變換一個(gè)對(duì)象的函數(shù),且對(duì)每個(gè)對(duì)象都有唯一的逆(如凱撒密碼中的3字母移位),而模式則是通過置換處理任意長(zhǎng)度的消息的算法(如凱撒密碼中的模式就是對(duì)每個(gè)字母施加相同的置換,而維吉尼亞密碼中則是對(duì)不同位置的字幕施加不同的置換)

置換

并不是任意置換都是安全的,為了保證安全,置換需要滿足:密鑰確定置換,只要密鑰保密,則置換保密。不同的密鑰確定不同的置換。置換應(yīng)當(dāng)看起來隨機(jī),經(jīng)過置換的密文應(yīng)該沒有顯著的特征或者可識(shí)別的模式。

如果滿足以上條件,則稱這種置換為安全置換,但是這僅是建立安全密碼的必要不充分條件,因?yàn)槠溥€和模式相關(guān)。

操作模式

在說明操作模式為什么也是建立安全密碼的必要條件之前,我們舉個(gè)例子。

假設(shè)我們現(xiàn)在已經(jīng)有一種安全的置換:A->X,B->M,N->L

那么對(duì)于香蕉的英文BANANA則有密文:MXLXLX

我們注意到,僅僅對(duì)明文中的所有字母施加相同的置換,在密文中會(huì)表現(xiàn)出一種重復(fù)的模式,攻擊者分析這種模式,即使不能獲得完整的信息,但是也能獲得一部分信息,比如在這個(gè)例子的密文中我們看到在字母的第2,4,6位出現(xiàn)相同的字母,在3,5位出現(xiàn)了相同的字母,如果攻擊者知道密文對(duì)應(yīng)的是一種水果,那么攻擊者很容易推測(cè)出這是BANANA,而不是ORANGE等其他水果。

從這個(gè)例子可以看出模式的重要性,模式通過對(duì)相同的字母施加不同的置換從而降低了明文中重復(fù)字母在密文中表現(xiàn)出的特征的風(fēng)險(xiǎn)。以維吉尼亞密碼為例,如果密鑰長(zhǎng)度為N,那么就有N種不同的置換被施加在連續(xù)長(zhǎng)度為N的字母串上,不過如果N并非足夠長(zhǎng),我們就可以通過頻率分析對(duì)其進(jìn)行攻擊。所以,如果維吉尼亞密碼并應(yīng)用于加密與密鑰長(zhǎng)度相同的明文,則頻率分析就失效了。

一次一密

我們回過頭來在看古典密碼,它注定是不安全的,以我們現(xiàn)在的計(jì)算能力分分鐘就能攻破它。我們知道,為了確定安全,置換應(yīng)該看起來是隨機(jī)的,最好的方法就是從所有置換的集合中隨機(jī)選擇每個(gè)置換。實(shí)際上可以選擇的置換有很多,對(duì)于字母表,有26!,約等于2^88種置換,但是古典密碼卻只能使用其中的一小部分。

此外,置換不僅僅可以通過字母移位進(jìn)行,還可以使用其他操作如乘法、加法等,這便是現(xiàn)代密碼了,比如給定128比特密鑰,然后進(jìn)行一定比特位的操作來加密單個(gè)字母。

古典密碼是絕對(duì)不安全的,那么有沒有絕對(duì)安全的密碼呢?

有的,那便是我們這里有介紹的一次一密。

一次一密有絕對(duì)的保密性,即使攻擊者有無限的計(jì)算能力,也無法了解除明文長(zhǎng)度以外的任何信息。

設(shè)明文為P,密鑰為K,其長(zhǎng)度與P相等,密文為C,則一次一密的加密過程為:

這個(gè)符號(hào)是異或運(yùn)算符

解密則是

一次一密的關(guān)鍵在于密鑰K只能使用一次。如果使用兩次,設(shè)分別將明文P1,P2加密為C1,C2,則攻擊者通過如下運(yùn)算

可以得到P1,P2的異或結(jié)果,從而導(dǎo)致信息泄露(當(dāng)攻擊者這知道一條明文時(shí),就可以通過上式結(jié)果推出另一條明文)

一次一密的不便之處在于密鑰長(zhǎng)度需要和明文一樣,除了這個(gè)缺點(diǎn)外,是非常完美的。香農(nóng)在上世紀(jì)40年代的時(shí)候就已經(jīng)證明了其安全性。

香農(nóng)指出,要實(shí)現(xiàn)完美的保密,一次一密的密鑰必須至少與明文一樣長(zhǎng),這樣攻擊者就無法在給定密文的情況下排除任何可能的明文。

這是非常直觀的,如果K是隨機(jī)的,那么C也是隨機(jī)的,因?yàn)殡S機(jī)字符串與任何固定字符串異或得到的結(jié)果也是隨機(jī)的。隨機(jī)比特串第一位為0的概率為1/2,一個(gè)隨機(jī)比特與另一比特異或的結(jié)果為0的概率為1/2,在任意長(zhǎng)度的比特串上這一點(diǎn)都成立。換句話說,對(duì)于不知道K的攻擊者而言,即使其擁有的時(shí)間和算力是無限的,但是對(duì)他而言C依然是隨機(jī)的。

假設(shè)C長(zhǎng)度為128比特,那么有2^128種可能的密文,對(duì)于攻擊者而言,

就有2^128種可能的明文。如果密鑰長(zhǎng)度小于128,即可能的密鑰少于

2^128種,那么攻擊者可以排除某些明文。比如密鑰為64比特,那么攻擊者可以確定

2^64種可能的明文,這就排除了大多數(shù)的128位比特串。

此時(shí)攻擊者可能不知道明文是什么,但是其知道明文不是什么,從而破壞了完美保密性。

現(xiàn)在我們已經(jīng)知道,古典密碼不安全,一次一密不實(shí)用,那么怎么設(shè)計(jì)安全和實(shí)用兼顧的密碼呢?

攻擊模型與安全性

如果一個(gè)密碼體制是安全的,必須要定義好對(duì)應(yīng)的攻擊模型和安全性目標(biāo)。攻擊模型是關(guān)于攻擊者可能與密碼算法如何交互以及攻擊者能力的一系列假設(shè)。在進(jìn)一步分析之前,我們要先了解Kerckhoff原則,其指出,密碼的安全性應(yīng)僅取決于密鑰的保密性,而不應(yīng)取決于密碼算法的保密性。

黑盒模型

如果攻擊者只能看到密碼模型的輸入和輸出,則稱其為黑盒模型。黑盒模型中依據(jù)從最弱到最強(qiáng)的順序列舉如下:

唯密文攻擊(ciphertext-only attackers,COA):僅知道密文,但不知道相關(guān)的明文,也不知道有哪些可以選擇的明文。此時(shí)攻擊者是完全被動(dòng)的,無法執(zhí)行加密或解密操作

已經(jīng)明文攻擊(known-plaintext attackes,KPA):知道密文以及其對(duì)應(yīng)的明文。此時(shí)攻擊者也是被動(dòng)的,不過它可以獲得一系列明文-密文對(duì),其中明文是隨機(jī)選擇的。

選擇明文攻擊(chosen-plaintext attacks,CPA):可以對(duì)選定的明文進(jìn)行加密并得到對(duì)應(yīng)的密文。此時(shí)的攻擊者是主動(dòng)的

選擇密文攻擊(chosen-ciphertext attackers,CCA):可以進(jìn)行加密和解密。注意,這個(gè)模型只是表示攻擊者可以介入加密和查看明文的情況,其解密的內(nèi)容并不一定足以攻破系統(tǒng)。

灰盒模型

灰盒模型中,攻擊者可以訪問密碼的實(shí)現(xiàn),比如對(duì)于智能卡、嵌入式系統(tǒng)等,攻擊者對(duì)其擁有物理訪問權(quán)限,從而可以篡改算法的內(nèi)部結(jié)構(gòu)。這類模型中最典型的一類就是側(cè)信道攻擊。

側(cè)信道攻擊依賴于密碼實(shí)現(xiàn)的信息源,攻擊者觀察密碼實(shí)施時(shí)的模型特征,比如對(duì)于軟件而言,可以觀察其執(zhí)行時(shí)間、錯(cuò)誤消息、返回值、分支等,對(duì)于硬件而言,可以觀察其功耗、電磁輻射等。

侵入式攻擊也屬于灰盒模型,其可以通過激光故障注入等方法改變芯片的行為。

安全目標(biāo)

我們之前一直都沒有明確定義密碼的安全目標(biāo),只是籠統(tǒng)地說,能讓攻擊者對(duì)密碼一無所示的就是好方法,實(shí)際上這是遠(yuǎn)遠(yuǎn)不夠的。實(shí)際上,已經(jīng)有兩個(gè)常用的安全目標(biāo)了。

1.不可區(qū)分性(indistinguishability,IND):密文應(yīng)與隨機(jī)字符串沒有區(qū)別。關(guān)于這一點(diǎn),可以通過一個(gè)game說明。

設(shè)攻擊者選定兩個(gè)明文,收到兩者的密文之一,攻擊者無法分辨出這是哪個(gè)明文對(duì)應(yīng)的密文

2.不可展性(non-malleability,NM):給定密文C1,應(yīng)該不可能創(chuàng)建另一個(gè)密文C2,使其對(duì)應(yīng)的明文P2以有意義的方式與P1相關(guān)

IND-CPA

上述的安全目標(biāo)僅在于具體的攻擊模型結(jié)合時(shí)才有用,一般我們會(huì)寫作GOAL-MODEL,如IND-CPA,表示的是針對(duì)選擇明文攻擊者的不可區(qū)分性。

以IND-CPA為例,這是最重要的安全概念之一,這也稱為語義安全,只要密鑰保密,密文就不會(huì)泄露任何有關(guān)明文的信息,當(dāng)對(duì)同一明文加密兩次時(shí),加密系統(tǒng)會(huì)返回不同的密文。

IND-CPA的關(guān)鍵是隨機(jī)化,我們還是以IND game為例。設(shè)攻擊者選擇兩個(gè)明文P1,P2并接受兩個(gè)明文之一對(duì)應(yīng)的密文但是不知道它對(duì)應(yīng)的是哪一個(gè)明文。在CPA模型中,攻擊者可以執(zhí)行加密以獲得大C1=E(K,P1),C2=E(K,P2),如果加密不是隨機(jī)的,那么攻擊者查詢Ci是否等于C1或C2就可以確定對(duì)哪個(gè)明文加密,從而贏得game。

實(shí)現(xiàn)IND-CPA最簡(jiǎn)單的方式就是使用確定性隨機(jī)比特發(fā)生器(deterministic random generator,DRBG),它可以返回給定的某些秘密值的隨機(jī)比特:

E(K,R,P)=(DBRG(K||R)異或P,R)

上式中的R是每次加密隨機(jī)選擇的字符串,并與密鑰K一起提供給DRBG,如果其生成的是真隨機(jī)比特串,那么該密碼的就是IND-CPA安全的。

這里我們只是簡(jiǎn)單分析了IND-CPA,這種GOAL-MODEL組合還有很多,比如NM-CPA,NM-CCA,IND-CPA,IND-CCA等,他們之間的一些關(guān)系是很明顯的:IND-CCA蘊(yùn)含著IND-CPA,NM-CCA蘊(yùn)含著NM-CPA,因?yàn)镃PA攻擊者可以做的事情CCA攻擊者也可以做。

以上我們都還是考慮了對(duì)稱密碼,對(duì)于非對(duì)稱密碼而言,由于任何攻擊者都可以使用公鑰加密,所以模型默認(rèn)都是CPA的

弱密碼算法

盡管我們已經(jīng)介紹了相關(guān)的密碼學(xué)概念,但是在實(shí)際中如果沒有選擇適當(dāng)?shù)拿艽a算法、模型等,還是會(huì)造成嚴(yán)重的危害。

在GSM時(shí)代,手機(jī)通信的加密使用了A5/1的算法,通過建立查找表便可以對(duì)其進(jìn)行攻擊。在參考連接6中,可以看到詳細(xì)的情況。

錯(cuò)誤模型

即使密碼使用者學(xué)習(xí)過安全模型,但還是有可能使用錯(cuò)誤模型。很多通信協(xié)議確實(shí)使用了在CPA或CCA中安全的算法,但是實(shí)際中有些攻擊是不需要涉及CPA中的加密查詢或CCA中的解密查詢的,比如對(duì)于Padding oracle attack而言,只需要進(jìn)行有效性查詢即可,在這種攻擊方案下,只有密文對(duì)應(yīng)的明文有適當(dāng)?shù)奶畛鋾r(shí),密文才有效,如果填充不正確,解密就會(huì)失敗,攻擊者可以通過觀察解密是否失敗進(jìn)行攻擊。

這種攻擊方案,打CTF的師傅們應(yīng)該很熟悉了,這里也不再進(jìn)一步說明,有興趣的話也可以參考《白帽子講web安全》中的相關(guān)章節(jié)。

隨機(jī)性

我們已經(jīng)知道,在密碼系統(tǒng)中,需要隨機(jī)性來保證安全。可以說,其中的關(guān)鍵就在于隨機(jī)比特的生成,其依賴于熵源以及從熵源產(chǎn)生隨機(jī)比特的算法。

熵源由隨機(jī)數(shù)發(fā)生器(RNG)提供,算法由偽隨機(jī)數(shù)發(fā)生器(PRNG)提供。

RNG的作用是利用模擬世界中的熵在數(shù)字系統(tǒng)中生成不可預(yù)測(cè)的比特,比如從溫度、噪聲、靜電測(cè)量中采樣出比特信息,也可以從傳感器,IO,系統(tǒng)日志等提取正在運(yùn)行的OS中的熵。而PRNG的作用則是從一些真正隨機(jī)的比特生成許多人為的隨機(jī)比特。

總結(jié)來說,RNG以非確定的方式從模擬源生成真隨機(jī)比特,不保證高熵,而PRNG以確定的方式從數(shù)字源生成看起來隨機(jī)的比特,并具有最大熵。

在隨機(jī)性方面可能出現(xiàn)哪些問題呢?

熵源不理想

一開始的Netscape瀏覽器的SSL代碼是根據(jù)如下所示的偽碼計(jì)算出128比特的PRNG種子的

這里的問題在于,PID和microseconds是可以被猜測(cè)的,如果可以猜到seconds,那么microseconds就只有10^6個(gè)可能的值

這是Log(10^6)的熵,大約20比特

另外,PID和PPID各15比特,所以本應(yīng)有15+15=30比特的熵,但是在標(biāo)注的1中,可看到,PPID和PID有3比特的重疊,所以只能產(chǎn)生15+12=27比特的熵

所以一共的熵為20+27=47比特,但是128比特的種子應(yīng)該128比特的熵才對(duì)。這是熵源不理想的典型例子。

啟動(dòng)時(shí)熵不足

前些年有研究人員掃描整個(gè)互聯(lián)網(wǎng)并從TLS證書和SSL主機(jī)中提取公鑰,發(fā)現(xiàn)一些系統(tǒng)具有相同的公鑰,私鑰也非常相似。這是非常不合常理的,因?yàn)橐话闱闆r下,對(duì)于兩個(gè)不同的大數(shù)n=pq,n'=p'q',p與p'不相等,q與q'不相等,但是研究人員發(fā)現(xiàn)經(jīng)常會(huì)有n與n'不相等的情況下,p=p'

后面發(fā)現(xiàn)這其中的原因是,盡管使用了不錯(cuò)的PRNG,但由于在初次啟動(dòng)時(shí)會(huì)盡早生成公鑰,所以在收集到足夠的熵之前,如果基礎(chǔ)熵源選取相同,那么不同系統(tǒng)中的PRNG會(huì)產(chǎn)生相同的隨機(jī)比特。

會(huì)生成相同的密鑰,是由于以下偽碼中的密鑰生成方案造成的


如果兩個(gè)系統(tǒng)的種子相同,運(yùn)行上述代碼后會(huì)生成相同的p,q,也就會(huì)生成相同的n。而只有研究人員發(fā)現(xiàn)的,在不同密鑰中存在共享素?cái)?shù),則是因?yàn)樵诿荑€生成過程中注入了額外的熵,如下所示


如果兩個(gè)系統(tǒng)使用相同的種子運(yùn)行上述代碼,會(huì)生成相同的p,但是由于prng.add_entropy()注入了熵,會(huì)得到不同的q

對(duì)于n=pq,n'=pq'的情況,會(huì)有什么為題呢?

這里的關(guān)鍵在于,通過計(jì)算n和n‘的最大公約數(shù)就可以恢復(fù)出p。

非加密PRNG

PRNG很常見,在不涉及密碼學(xué)的場(chǎng)合中也有其身影,我們可以分為加密PRNG和非加密PRNG。非加密PRNG的作用一般是用于生成良好均勻的分布,常用于科學(xué)模型、視頻游戲中,它只關(guān)心比特之間的概率分布的質(zhì)量,但是不關(guān)心它的可預(yù)測(cè)性,所以在密碼程序中不應(yīng)使用非加密PRNG.

但是實(shí)際上,很多編程語言中都用的是非加密PRNG,比如libc中的rand,drand48,PHP中的rand,mt_rand,Python中的random模運(yùn)算,Ruby中的Random類等。最常見的非加密PRNG就是Mersenne Twister(MT)算法了,它可以產(chǎn)生沒好友統(tǒng)計(jì)偏差的符合一致分布的隨機(jī)比特,但是這些比特是可預(yù)測(cè)的,給定一些MT產(chǎn)生的一些比特,可以預(yù)測(cè)接下來會(huì)出現(xiàn)哪些比特。

MT算法比加密PRNG簡(jiǎn)單多了,其內(nèi)部狀態(tài)是一個(gè)由624個(gè)32比特字組成的數(shù)組S,其初始值為S1,S2,...S624,運(yùn)行一次后變?yōu)镾2,...S625...其中的Sk+624可以通過如下計(jì)算:

初始狀態(tài)的比特可以表示為輸出比特之間的異或,反之亦然。

如果將其應(yīng)用于密碼系統(tǒng)則會(huì)造成危害。

MediaWiki使用隨機(jī)性生成諸如安全令牌、臨時(shí)密碼等信息,按理來說,此處的隨機(jī)性應(yīng)是不可預(yù)測(cè)的,但是舊版本的MediaWiki使用了非加密PRNG來生成這些令牌和密碼,其源碼部分如下


從代碼中可以看到mt_rand()

這就是我們一直在說的Mersenne Twister,利用它攻擊者就可以預(yù)測(cè)未來的令牌和臨時(shí)密碼。

參考

1.Shoup V. OAEP reconsidered[C]//Annual International Cryptology Conference. Springer, Berlin, Heidelberg, 2001: 239-259. 2.https://www.semanticscholar.org/paper/Understanding-brute-force-Bernstein/3bf374700ec98ea5d1b7658ec85c472f2fe4d952 3.https://link.springer.com/article/10.1007/s00145-003-0213-5 4.https://dl.acm.org/doi/10.1145/800070.802212 5.https://www.schneier.com/academic/archives/1998/01/cryptanalytic_attack.html 6.https://zh.wikipedia.org/wiki/A5/1 7.https://guidanceshare.com/wiki/Non-cryptographic_PRNG 8.https://www.mediawiki.org/wiki/Manual:Config_script/it 9.https://blog.cryptographyengineering.com/2012/03/09/surviving-bad-rng/ 10.https://www.cs.umd.edu/class/fall2018/cmsc818O/papers/ps-and-qs.pdf

原創(chuàng)稿件征集

征集原創(chuàng)技術(shù)文章中,歡迎投遞

投稿郵箱:edu@antvsion.com

文章類型:黑客極客技術(shù)、信息安全熱點(diǎn)安全研究分析等安全相關(guān)

通過審核并發(fā)布能收獲200-800元不等的稿酬。

更多詳情,點(diǎn)我查看!

體驗(yàn)靶場(chǎng)實(shí)操,戳“閱讀原文”體驗(yàn)

總結(jié)

以上是生活随笔為你收集整理的密码学的安全性浅析-1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。