1. 在加密過程中必須用到的三個主要元素是
在加密過程中,必須用到的三個主要元素是:所傳輸的信息(明文)、加密鑰匙(Encryption_key)、加密函數。
加密是一個過程,它使信息只對正確的接收者可讀,其他用戶看到的是雜亂無序的信息,使其只能在使用相應的密鑰解密之後才能顯示出本來內容。
通過加密的方法來達到保護數據不被非法人竊取、閱讀的目的。加密在網路上的作用就是防止私有化信息在網路上被攔截和竊取。通過加密可保證信息的機密性、完整性、鑒別性和不可否認性。
2. 一種普通的語言或字母加密方法
密碼的使用最早可以追溯到古羅馬時期,《高盧戰記》有描述愷撒曾經使用密碼來傳遞信息,即所謂的「愷撒密碼」,它是一種替代密碼,通過將字母按順序推後起3位起到加密作用,如將字母A換作字母D,將字母B換作字母E。因據說愷撒是率先使用加密函的古代將領之一,因此這種加密方法被稱為愷撒密碼。這是一種簡單的加密方法,這種密碼的密度是很低的,只需簡單地統計字頻就可以破譯。 現今又叫「移位密碼」,只不過移動的為數不一定是3位而已。
密碼術可以大致別分為兩種,即易位和替換,當然也有兩者結合的更復雜的方法。在易位中字母不變,位置改變;替換中字母改變,位置不變。
將替換密碼用於軍事用途的第一個文件記載是愷撒著的《高盧記》。愷撒描述了他如何將密信送到正處在被圍困、瀕臨投降的西塞羅。其中羅馬字母被替換成希臘字母使得敵人根本無法看懂信息。
蘇托尼厄斯在公元二世紀寫的《愷撒傳》中對愷撒用過的其中一種替換密碼作了詳細的描寫。愷撒只是簡單地把信息中的每一個字母用字母表中的該字母後的第三個字母代替。這種密碼替換通常叫做愷撒移位密碼,或簡單的說,愷撒密碼。
盡管蘇托尼厄斯僅提到三個位置的愷撒移位,但顯然從1到25個位置的移位我們都可以使用, 因此,為了使密碼有更高的安全性,單字母替換密碼就出現了。
如:
明碼表 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密碼表 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M
明文 F O R E S T
密文 Y G K T L Z
只需重排密碼表二十六個字母的順序,允許密碼表是明碼表的任意一種重排,密鑰就會增加到四千億億億多種,我們就有超過4×1027種密碼表。破解就變得很困難。
如何破解包括愷撒密碼在內的單字母替換密碼?
方法:字母頻度分析
盡管我們不知道是誰發現了字母頻度的差異可以用於破解密碼。但是9世紀的科學家阿爾·金迪在《關於破譯加密信息的手稿》對該技術做了最早的描述。
「如果我們知道一條加密信息所使用的語言,那麼破譯這條加密信息的方法就是找出同樣的語言寫的一篇其他文章,大約一頁紙長,然後我們計算其中每個字母的出現頻率。我們將頻率最高的字母標為1號,頻率排第2的標為2號,第三標為3號,依次類推,直到數完樣品文章中所有字母。然後我們觀察需要破譯的密文,同樣分類出所有的字母,找出頻率最高的字母,並全部用樣本文章中最高頻率的字母替換。第二高頻的字母用樣本中2號代替,第三則用3號替換,直到密文中所有字母均已被樣本中的字母替換。」
以英文為例,首先我們以一篇或幾篇一定長度的普通文章,建立字母表中每個字母的頻度表。
在分析密文中的字母頻率,將其對照即可破解。
雖然設密者後來針對頻率分析技術對以前的設密方法做了些改進,比如說引進空符號等,目的是為了打破正常的字母出現頻率。但是小的改進已經無法掩蓋單字母替換法的巨大缺陷了。到16世紀,最好的密碼破譯師已經能夠破譯當時大多數的加密信息。
局限性:
短文可能嚴重偏離標准頻率,加入文章少於100個字母,那麼對它的解密就會比較困難。
而且不是所有文章都適用標准頻度:
1969年,法國作家喬治斯·佩雷克寫了一部200頁的小說《逃亡》,其中沒有一個含有字母e的單詞。更令人稱奇的是英國小說家和拼論家吉爾伯特·阿代爾成功地將《逃亡》翻譯成英文,而且其中也沒有一個字母e。阿代爾將這部譯著命名為《真空》。如果這本書用單密碼表進行加密,那麼頻度分析破解它會受到很大的困難。
一套新的密碼系統由維熱納爾(Blaise de Vigenere)於16世紀末確立。其密碼不再用一個密碼表來加密,而是使用了26個不同的密碼表。這種密碼表最大的優點在於能夠克制頻度分析,從而提供更好的安全保障。
「愷撒密碼」據傳是古羅馬愷撒大帝用來保護重要軍情的加密系統。它是一種替代密碼,通過將字母按順序推後起3位起到加密作用,如將字母A換作字母D,將字母B換作字母E。據說愷撒是率先使用加密函的古代將領之一,因此這種加密方法被稱為愷撒密碼。
假如有這樣一條指令:
RETURN TO ROME
用愷撒密碼加密後就成為:
UHWXUA WR URPH
如果這份指令被敵方截獲,也將不會泄密,因為字面上看不出任何意義。
這種加密方法還可以依據移位的不同產生新的變化,如將每個字母左19位,就產生這樣一個明密對照表:
明:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密:T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
在這個加密表下,明文與密文的對照關系就變成:
明文:THE FAULT, DEAR BRUTUS, LIES NOT IN OUR STARS BUT IN OURSELVES.
密文:MAX YTNEM, WXTK UKNMNL, EBXL GHM BG HNK LMTKL UNM BG HNKLXEOXL.
很明顯,這種密碼的密度是很低的,只需簡單地統計字頻就可以破譯。於是人們在單一愷撒密碼的基礎上擴展出多表密碼,稱為「維吉尼亞」密碼。它是由16世紀法國亨利三世王朝的布萊瑟·維吉尼亞發明的,其特點是將26個愷撒密表合成一個,見下表:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
CC D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
維吉尼亞密碼引入了「密鑰」的概念,即根據密鑰來決定用哪一行的密表來進行替換,以此來對抗字頻統計。假如以上面第一行代表明文字母,左面第一列代表密鑰字母,對如下明文加密:
TO BE OR NOT TO BE THAT IS THE QUESTION
當選定RELATIONS作為密鑰時,加密過程是:明文一個字母為T,第一個密鑰字母為R,因此可以找到在R行中代替T的為K,依此類推,得出對應關系如下:
密鑰:RELAT IONSR ELATI ONSRE LATIO NSREL
明文:TOBEO RNOTT OBETH ATIST HEQUE STION
密文:KSMEH ZBBLK SMEMP OGAJX SEJCS FLZSY
歷史上以維吉尼亞密表為基礎又演變出很多種加密方法,其基本元素無非是密表與密鑰,並一直沿用到二戰以後的初級電子密碼機上。
3. 密碼學基礎(三):非對稱加密(RSA演算法原理)
加密和解密使用的是兩個不同的秘鑰,這種演算法叫做非對稱加密。非對稱加密又稱為公鑰加密,RSA只是公鑰加密的一種。
現實生活中有簽名,互聯網中也存在簽名。簽名的作用有兩個,一個是身份驗證,一個是數據完整性驗證。數字簽名通過摘要演算法來確保接收到的數據沒有被篡改,再通過簽名者的私鑰加密,只能使用對應的公鑰解密,以此來保證身份的一致性。
數字證書是將個人信息和數字簽名放到一起,經由CA機構的私鑰加密之後生成。當然,不經過CA機構,由自己完成簽名的證書稱為自簽名證書。CA機構作為互聯網密碼體系中的基礎機構,擁有相當高級的安全防範能力,所有的證書體系中的基本假設或者前提就是CA機構的私鑰不被竊取,一旦 CA J機構出事,整個信息鏈將不再安全。
CA證書的生成過程如下:
證書參與信息傳遞完成加密和解密的過程如下:
互質關系:互質是公約數只有1的兩個整數,1和1互質,13和13就不互質了。
歐拉函數:表示任意給定正整數 n,在小於等於n的正整數之中,有多少個與 n 構成互質關系,其表達式為:
其中,若P為質數,則其表達式可以簡寫為:
情況一:φ(1)=1
1和任何數都互質,所以φ(1)=1;
情況二:n 是質數, φ(n)=n-1
因為 n 是質數,所以和小於自己的所有數都是互質關系,所以φ(n)=n-1;
情況三:如果 n 是質數的某一個次方,即 n = p^k ( p 為質數,k 為大於等於1的整數),則φ(n)=(p-1)p^(k-1)
因為 p 為質數,所以除了 p 的倍數之外,小於 n 的所有數都是 n 的質數;
情況四:如果 n 可以分解成兩個互質的整數之積,n = p1 × p2,則φ(n) = φ(p1p2) = φ(p1)φ(p2)
情況五:基於情況四,如果 p1 和 p2 都是質數,且 n=p1 × p2,則φ(n) = φ(p1p2) = φ(p1)φ(p2)=(p1-1)(p2-1)
而 RSA 演算法的基本原理就是歐拉函數中的第五種情況,即: φ(n)=(p1-1)(p2-1);
如果兩個正整數 a 和 n 互質,那麼一定可以找到整數 b,使得 ab-1 被 n 整除,或者說ab被n除的余數是1。這時,b就叫做a的「模反元素」。歐拉定理可以用來證明模反元素必然存在。
可以看到,a的 φ(n)-1 次方,就是a對模數n的模反元素。
n=p x q = 3233,3233寫成二進制是110010100001,一共有12位,所以這個密鑰就是12位。
在實際使用中,一般場景下選擇1024位長度的數字,更高安全要求的場景下,選擇2048位的數字,這里作為演示,選取p=61和q=53;
因為n、p、q都為質數,所以φ(n) = (p-1)(q-1)=60×52= 3120
注意,這里是和φ(n) 互互質而不是n!假設選擇的值是17,即 e=17;
模反元素就是指有一個整數 d,可以使得 ed 被 φ(n) 除的余數為1。表示為:(ed-1)=φ(n) y --> 17d=3120y+1,算出一組解為(2753,15),即 d=2753,y=-15,也就是(17 2753-1)/3120=15。
注意,這里不能選擇3119,否則公私鑰相同??
公鑰:(n,e)=(3233,2753)
私鑰:(n,d)=(3233,17)
公鑰是公開的,也就是說m=p*q=3233是公開的,那麼怎麼求e被?e是通過模反函數求得,17d=3120y+1,e是公開的等於17,這時候想要求d就要知道3120,也就是φ(n),也就是φ(3233),說白了,3233是公開的,你能對3233進行因數分解,你就能知道d,也就能破解私鑰。
正常情況下,3233我們可以因數分解為61*53,但是對於很大的數字,人類只能通過枚舉的方法來因數分解,所以RSA安全性的本質就是:對極大整數做因數分解的難度決定了RSA演算法的可靠性。換言之,對一極大整數做因數分解愈困難,RSA演算法愈可靠。
人類已經分解的最大整數是:
這個人類已經分解的最大整數為232個十進制位,768個二進制位,比它更大的因數分解,還沒有被報道過,因此目前被破解的最長RSA密鑰就是768位。所以實際使用中的1024位秘鑰基本安全,2048位秘鑰絕對安全。
網上有個段子:
已經得出公私鑰的組成:
公鑰:(n,e)=(3233,2753)
私鑰:(n,d)=(3233,17)
加密的過程就是
解密過程如下:
其中 m 是要被加密的數字,c 是加密之後輸出的結果,且 m < n ,其中解密過程一定成立可以證明的,這里省略證明過程。
總而言之,RSA的加密就是使用模反函數對數字進行加密和求解過程,在實際使用中因為 m < n必須成立,所以就有兩種加密方法:
對稱加密存在雖然快速,但是存在致命的缺點就是秘鑰需要傳遞。非對稱加密雖然不需要傳遞秘鑰就可以完成加密和解密,但是其致命缺點是速度不夠快,不能用於高頻率,高容量的加密場景。所以才有了兩者的互補關系,在傳遞對稱加密的秘鑰時採用非對稱加密,完成秘鑰傳送之後採用對稱加密,如此就可以完美互補。
4. 常見的密碼系統包含的元素
常見密碼系統包含的元素是明文、密文、密鑰、加密演算法、解密演算法。
明文:是指沒有加密的文字(或者字元串),一般人都能看懂的意思,屬於密碼學術語;
密文:密文是加了密的的文字,明文是加密之前的文字。密文是對明文進行加密後的報文;
密鑰:密鑰是一種參數,它是在明文轉換為密文或將密文轉換為明文的演算法中輸入的參數。密鑰分為對稱密鑰與非對稱密鑰;
加密演算法:數據加密的基本過程就是對原來為明文的文件或數據按某種演算法進行處理,使其成為不可讀的一段代碼為「密文」,使其只能在輸入相應的密鑰之後才能顯示出原容,通過這樣的途徑來達到保護數據不被非法人竊取、閱讀的目的。該過程的逆過程為解密,即將該編碼信息轉化為其原來數據的過程。
5. 加密過程中的三個元素是什麼
A. 所傳輸的信息(明文)
B. 加密鑰匙(Encryption key)
C. 加密函數
6. 加密技術的兩個元素
加密技術包括兩個元素:演算法和密鑰。演算法是將普通的文本(或者可以理解的信息)與一串數字(密鑰)的結合,產生不可理解的密文的步驟,密鑰是用來對數據進行編碼和解碼的一種演算法。在安全保密中,可通過適當的密鑰加密技術和管理機制來保證網路的信息通訊安全。密鑰加密技術的密碼體制分為對稱密鑰體制和非對稱密鑰體制兩種。相應地,對數據加密的技術分為兩類,即對稱加密(私人密鑰加密)和非對稱加密(公開密鑰加密)。對稱加密以數據加密標准(DES,Data Encryption Standard)演算法為典型代表,非對稱加密通常以RSA(Rivest Shamir Adleman)演算法為代表。對稱加密的加密密鑰和解密密鑰相同,而非對稱加密的加密密鑰和解密密鑰不同,加密密鑰可以公開而解密密鑰需要保密。
7. 什麼是TEA演算法
TEA演算法被廣泛地應用於計算機數據加密領域,OICQ的數據安全採用了TEA演算法。本文討論了TEA的演算法的原理及實現,並揭示了QQ中該演算法的應用,本文是靈鑰科技公司(www.panakes.com)在即時通信密碼研究公開的第一篇論文,今後我們將陸續發表相關的論文及相應的產品。
TEA演算法簡介
TEA演算法是由劍橋大學計算機實驗室的DavidWheeler和RogerNeedham於1994年發明.TEA是TinyEncryptionAlgorithm的縮寫。特點是加密速度極快,高速高效,但是抗差分攻擊能力差。
TEA加密演算法是一種分組密碼演算法,其明文密文塊64比特(8位元組),密鑰長度128比特(16位元組)。TEA加密演算法的迭代次數可以改變,建議的迭代次數為32輪,盡管演算法的發明人強調加密16輪就很充分了。兩個TEAFeistel周期算為一輪。圖1示例了TEA一輪的加密流程。
以下示例了TEA的C語言加密演算法,TEA的解密演算法與加密演算法類似。
#defineTEA_ROUNDS0x20
#defineTEA_DELTA0x9E3779B9
#defineTEA_SUM0xE3779B90
voidtiny_encrypt(unsignedlong*constv,unsignedlong*constw,
constunsignedlong*constk)
{
registerunsignedlong
y=v[0],
z=v[1],
a=k[0],
b=k[1],
c=k[2],
d=k[3],
n=TEA_ROUNDS,
sum=0,
delta=TEA_DELTA;
while(n-->0){
sum+=delta;
y+=(z<<4)+a^z+sum^(z>>5)+b;
z+=(y<<4)+c^y+sum^(y>>5)+d;
}
w[0]=y;
w[1]=z;
}
TEA演算法利用的不斷增加的(即源程序中的delta)值作為變化,,就是黃金分割率。它的作用是使得每輪的加密是不同。的准確值可能不太重要。但是在這里,它被初始化為
=0x9e3779b
QQ是如何利用TEA進行加密的?
TEA演算法被廣泛應用於QQ的數據加密中,QQ採用16輪的TEA演算法加密,在這時採取16輪加密時而不採取標準的32輪加密時為了減少驗證伺服器的壓力。QQ在數據加密前採用了密碼學中的常用的填充及交織技術,減少加密數據的相關性,增加破譯者的破解難度。
下表列出了QQ應用TEA演算法幾個方面
序號
應用
相關文件
1
通訊報文的加密/解密
2
消息記錄的加密/解密
MsgEx.db
3
本地消息密碼、首次登錄時間、提示內容驗證密碼
Matrix.db
4
消息備份文件
*.bak
QQ的TEA演算法源程序分析
QQ在進行TEA加密前採用ntohl函數對原文數據和加密密鑰進行了變換,從網路位元組順序轉換位主機位元組順序進行加密後,再通過htonl函數將數據轉換為網路位元組順序的數據。
為什麼要這樣做呢?因為不同的計算機使用不同的位元組順序存儲數據。因此任何從Winsock函數對IP地址和埠號的引用和傳給Winsock函數的IP地址和埠號均時按照網路順序組織的。
為防止分析者分析出QQ是採用TEA加密演算法的,程序的設計者採用了subeax,61C88647h指令,而不採用Addeax9e3779b9h指令。因為分析者只需要判斷9e3779b9h(即是我們前面提的黃金分割率的值)就知道採用了TEA加密演算法。
sub_409A43procnear;CODEXREF:sub_409B8C+AEp
;sub_409B8C+109p...
var_10=dwordptr-10h
var_C=dwordptr-0Ch
var_8=dwordptr-8
var_4=dwordptr-4
arg_0=dwordptr8
arg_4=dwordptr0Ch
arg_8=dwordptr10h
pushebp
movebp,esp
subesp,10h
pushebx
pushesi
movesi,[ebp+arg_0]
pushedi
pushdwordptr[esi];netlong
callntohl
pushdwordptr[esi+4];netlong
movedi,eax;y
callntohl
movebx,eax;z
moveax,[ebp+arg_4]
leaecx,[ebp+var_10]
leaesi,[ebp+var_10]
subeax,ecx
mov[ebp+arg_0],4
mov[ebp+arg_4],eax
jmpshortloc_409A7C
;哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:00409A79
loc_409A79:;CODEXREF:sub_409A43+49j
moveax,[ebp+arg_4]
loc_409A7C:;CODEXREF:sub_409A43+34j
pushdwordptr[eax+esi];netlong
callntohl;對k[0],k[1],k[2],k[3]進行ntohl變化,
mov[esi],eax
addesi,4
dec[ebp+arg_0]
jnzshortloc_409A79
push10h;做十六輪TEA運算
xoreax,eax
popecx
loc_409A93:;CODEXREF:sub_409A43+88j
movedx,ebx
movesi,ebx
shredx,5;z>>5
addedx,[ebp+var_C];z>>5+k[1]
subeax,61C88647h;sum=sum+deltadelta:0x9e3779b9
shlesi,4;z<<4
addesi,[ebp+var_10];z<<4+k[0]
xoredx,esi;(z>>5+k[1])^(z<<4+k[0])
leaesi,[eax+ebx];sum+z
xoredx,esi;(z<<4+k[0])^(sum+z)^(z>>5+k[1])
addedi,edx;y+=(z<<4+k[0])^(sum+z)^(z>>5+k[1])
movedx,edi
movesi,edi
shredx,5;y>>5
addedx,[ebp+var_4];y>>5+k[3]
shlesi,4;y<<4
addesi,[ebp+var_8];y<<4+k[2]
xoredx,esi;(y>>5+k[3])^(y<<4+k[2])
leaesi,[eax+edi];(sum+y)
xoredx,esi;(y<<4+k[2])^(sum+y)^(y>>5+k[3])
addebx,edx;z+=(y<<4+k[2])^(sum+y)^(y>>5+k[3])
dececx
jnzshortloc_409A93
pushedi;hostlong
callhtonl
movesi,[ebp+arg_8]
pushebx;hostlong
mov[esi],eax;加密結果
callhtonl
mov[esi+4],eax;加密結果
popedi
popesi
popebx
leave
retn
sub_409A43endp
結論
作為一種分組加密演算法,TEA加密演算法在其發展的過程中,目前出現了幾種針對TEA演算法設計的缺陷攻擊方法,使得原有的TEA加密演算法變得不安全,在過去的十幾年中,TEA演算法進行了若干次的改進,歷經XTEA,BlockTEA,XXTEA幾個版本。目前最新的演算法是XXTEA。
QQ採用了最初的TEA演算法做其核心的加密演算法,QQ在採用TEA演算法時採用了16輪的加密,其加密復雜度比32輪減了許多。利用TEA演算法的設計缺陷,使得快速破解QQ密碼成為可能。
值得一提的QQ在利用TEA演算法做加密時,採用了交織及隨機填充隨機數的技術,增加了密碼分析者分析難度,從一定程度上保護了信息的安全。
更多信息請訪問www.panakes.com
TEA(Tiny Encryption Algorithm) 是一種優秀的數據加密演算法,雖然它比 DES(Data Encryption Standard) 要簡單得多, 但有很強的抗差分分析能力,加密速度也比 DES 快得多,而且對 64 位數據加密的密鑰長達 128 位,安全性相當好。 下面的程序來自盧開澄《計算機密碼學》(清華大學出版社)。
補充:為了使這段程序更加實用,我將其整理為幾個單元, 分別用於 Delphi 和 C++Builder 。包括對數據流 TMemoryStream 和字元串的加密/解密功能, 對字元串的加密/解密還通過 Base64 編碼/解碼,保持加密後的字元串仍為字元串。
// v[2] : 64bit data, k[4] : 128bit key
void encipher( unsigned long * const v, const unsigned long * const k )
{
register unsigned long y = v[0], z = v[1], sum = 0, delta = 0x9E3779B9,
a = k[0], b = k[1], c = k[2], d = k[3], n = 32;
while ( n-- > 0 )
{
sum += delta;
y += ( z << 4 ) + a ^ z + sum ^ ( z >> 5 ) + b;
z += ( y << 4 ) + c ^ y + sum ^ ( y >> 5 ) + d;
}
v[0] = y;
v[1] = z;
}
void decipher( unsigned long * const v, const unsigned long * const k )
{
register unsigned long y = v[0], z = v[1], sum = 0xC6EF3720, delta = 0x9E3779B9,
a = k[0], b = k[1], c = k[2], d = k[3], n = 32;
// sum = delta << 5, in general sum = delta * n
while ( n-- > 0 )
{
z -= ( y << 4 ) + c ^ y + sum ^ ( y >> 5 ) + d;
y -= ( z << 4 ) + a ^ z + sum ^ ( z >> 5 ) + b;
sum -= delta;
}
v[0] = y;
v[1] = z;
}
8. 加密技術06-加密總結
對稱密碼是一種用相同的密鑰進行加密和解密的技術,用於確保消息的機密性。在對稱密碼的演算法方面,目前主要使用的是 AES。盡管對稱密碼能夠確保消息的機密性,但需要解決將解密密鑰配送給接受者的密鑰配送問題。
主要演算法
DES
數據加密標准(英語:Data Encryption Standard,縮寫為 DES)是一種對稱密鑰加密塊密碼演算法,1976年被美國聯邦政府的國家標准局確定為聯邦資料處理標准(FIPS),隨後在國際上廣泛流傳開來。它基於使用56位密鑰的對稱演算法。
DES現在已經不是一種安全的加密方法,主要因為它使用的56位密鑰過短。
原理請參考: 加密技術01-對稱加密-DES原理
3DES
三重數據加密演算法(英語:Triple Data Encryption Algorithm,縮寫為TDEA,Triple DEA),或稱3DES(Triple DES),是一種對稱密鑰加密塊密碼,相當於是對每個數據塊應用三次DES演算法。由於計算機運算能力的增強,原版DES由於密鑰長度過低容易被暴力破解;3DES即是設計用來提供一種相對簡單的方法,即通過增加DES的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼演算法。
注意:有3個獨立密鑰的3DES的密鑰安全性為168位,但由於中途相遇攻擊(知道明文和密文),它的有效安全性僅為112位。
3DES使用「密鑰包」,其包含3個DES密鑰,K1,K2和K3,均為56位(除去奇偶校驗位)。
密文 = E k3 (D k2 (E k1 (明文)))
而解密則為其反過程:
明文 = D k3 (E k2 (D k1 (密文)))
AES
AES 全稱 Advanced Encryption Standard(高級加密標准)。它的出現主要是為了取代 DES 加密演算法的,因為 DES 演算法的密鑰長度是 56 位,因此演算法的理論安全強度是 56 位。於是 1997 年 1 月 2 號,美國國家標准技術研究所宣布希望徵集高級加密標准,用以取代 DES。AES 也得到了全世界很多密碼工作者的響應,先後有很多人提交了自己設計的演算法。最終有5個候選演算法進入最後一輪:Rijndael,Serpent,Twofish,RC6 和 MARS。最終經過安全性分析、軟硬體性能評估等嚴格的步驟,Rijndael 演算法獲勝。
AES 密碼與分組密碼 Rijndael 基本上完全一致,Rijndael 分組大小和密鑰大小都可以為 128 位、192 位和 256 位。然而 AES 只要求分組大小為 128 位,因此只有分組長度為 128 位的 Rijndael 才稱為 AES 演算法。
本文 AES 默認是分組長度為 128 位的 Rijndael 演算法
原理請參考: 加密技術02-對稱加密-AES原理
演算法對比
公鑰密碼是一種用不同的密鑰進行加密和解密的技術,和對稱密碼一樣用於確保消息的機密性。使用最廣泛的一種公鑰密碼演算法是 RAS。和對稱密碼相比,公鑰密碼的速度非常慢,因此一般都會和對稱密碼一起組成混合密碼系統來使用。公鑰密碼能夠解決對稱密碼中的密鑰交換問題,但存在通過中間人攻擊被偽裝的風險,因此需要對帶有數字簽名的公鑰進行認證。
公鑰密碼學的概念是為了解決對稱密碼學中最困難的兩個問題而提出
應用場景
幾個誤解
主要演算法
Diffie–Hellman 密鑰交換
迪菲-赫爾曼密鑰交換(英語:Diffie–Hellman key exchange,縮寫為D-H) 是一種安全協議。它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道創建起一個密鑰。這個密鑰可以在後續的通訊中作為對稱密鑰來加密通訊內容。公鑰交換的概念最早由瑞夫·墨克(Ralph C. Merkle)提出,而這個密鑰交換方法,由惠特菲爾德·迪菲(Bailey Whitfield Diffie)和馬丁·赫爾曼(Martin Edward Hellman)在1976年發表,也是在公開文獻中發布的第一個非對稱方案。
Diffie–Hellman 演算法的有效性是建立在計算離散對數很困難的基礎上。簡單地說,我們可如下定義離散對數。首先定義素數 p 的本原跟。素數 p 的本原根是一個整數,且其冪可以產生 1 到 p-1 之間所有整數,也就是說若 a 是素數 p 的本原根,則
a mod p, a 2 mod p,..., a p-1 mod p 各不相同,它是整數 1 到 p-1 的一個置換。
對任意整數 b 和素數 p 的本原跟 a,我們可以找到唯一的指數 i 使得
b ≡ a i (mod p) 其中 0 <= i <= p-1
其中 a, b, p 這些是公開的,i 是私有的,破解難度就是計算 i 的難度。
Elgamal
1985年,T.Elgamal 提出了一種基於離散對數的公開密鑰體制,一種與 Diffie-Hellman 密鑰分配體制密切相關。Elgamal 密碼體系應用於一些技術標准中,如數字簽名標准(DSS) 和 S/MIME 電子郵件標准。
基本原理就是利用 Diffie–Hellman 進行密鑰交換,假設交換的密鑰為 K,然後用 K 對要發送的消息 M,進行加密處理。
所以 Elgamal 的安全系數取決於 Diffie–Hellman 密鑰交換。
另外 Elgamal 加密後消息發送的長度會增加一倍。
RSA
MIT 的羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)在 1977 年提出並於 1978 年首次發表的演算法。RSA 是最早滿足要求的公鑰演算法之一,自誕生日起就成為被廣泛接受且被實現的通用的公鑰加密方法。
RSA 演算法的有效性主要依據是大數因式分解是很困難的。
原理請參考: 加密技術03-非對稱加密-RSA原理
ECC
大多數使用公鑰密碼學進行加密和數字簽名的產品和標准都使用 RSA 演算法。我們知道,為了保證 RSA 使用的安全性,最近這些年來密鑰的位數一直在增加,這對使用 RSA 的應用是很重的負擔,對進行大量安全交易的電子商務更是如此。近來,出現的一種具有強大競爭力的橢圓曲線密碼學(ECC)對 RSA 提出了挑戰。在標准化過程中,如關於公鑰密碼學的 IEEE P1363 標准中,人們也已考慮了 ECC。
與 RSA 相比,ECC 的主要誘人之處在於,它可以使用比 RSA 短得多的密鑰得到相同安全性,因此可以減少處理負荷。
ECC 比 RSA 或 Diffie-Hellman 原理復雜很多,本文就不多闡述了。
演算法對比
公鑰密碼體制的應用
密碼分析所需計算量( NIST SP-800-57 )
註:L=公鑰的大小,N=私鑰的大小
散列函數是一種將長消息轉換為短散列值的技術,用於確保消息的完整性。在散列演算法方面,SHA-1 曾被廣泛使用,但由於人們已經發現了一些針對該演算法理論上可行的攻擊方式,因此該演算法不應再被用於新的用途。今後我們應該主要使用的演算法包括目前已經在廣泛使用的 SHA-2,以及具有全新結構的 SHA-3 演算法。散列函數可以單獨使用,也可以作為消息認證、數字簽名以及偽隨機數生成器等技術的組成元素來使用。
主要應用
主要演算法
MD5
MD5消息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個 128 位( 16 位元組,被表示為 32 位十六進制數字)的散列值(hash value),用於確保信息傳輸完整一致。MD5 由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於 1992 年公開,用以取代 MD4 演算法。這套演算法的程序在 RFC 1321 中被加以規范。
2009年,中國科學院的謝濤和馮登國僅用了 2 20.96 的碰撞演算法復雜度,破解了MD5的碰撞抵抗,該攻擊在普通計算機上運行只需要數秒鍾。2011年,RFC 6151 禁止MD5用作密鑰散列消息認證碼。
原理請參考: 加密技術04-哈希演算法-MD5原理
SHA-1
SHA-1(英語:Secure Hash Algorithm 1,中文名:安全散列演算法1)是一種密碼散列函數,美國國家安全局設計,並由美國國家標准技術研究所(NIST)發布為聯邦資料處理標准(FIPS)。SHA-1可以生成一個被稱為消息摘要的160位(20位元組)散列值,散列值通常的呈現形式為40個十六進制數。
2005年,密碼分析人員發現了對SHA-1的有效攻擊方法,這表明該演算法可能不夠安全,不能繼續使用,自2010年以來,許多組織建議用SHA-2或SHA-3來替換SHA-1。Microsoft、Google以及Mozilla都宣布,它們旗下的瀏覽器將在2017年停止接受使用SHA-1演算法簽名的SSL證書。
2017年2月23日,CWI Amsterdam與Google宣布了一個成功的SHA-1碰撞攻擊,發布了兩份內容不同但SHA-1散列值相同的PDF文件作為概念證明。
2020年,針對SHA-1的選擇前綴沖突攻擊已經實際可行。建議盡可能用SHA-2或SHA-3取代SHA-1。
原理請參考: 加密技術05-哈希演算法-SHA系列原理
SHA-2
SHA-2,名稱來自於安全散列演算法2(英語:Secure Hash Algorithm 2)的縮寫,一種密碼散列函數演算法標准,由美國國家安全局研發,由美國國家標准與技術研究院(NIST)在2001年發布。屬於SHA演算法之一,是SHA-1的後繼者。其下又可再分為六個不同的演算法標准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
SHA-2 系列的演算法主要思路和 SHA-1 基本一致
原理請參考: 加密技術05-哈希演算法-SHA系列原理
SHA-3
SHA-3 第三代安全散列演算法(Secure Hash Algorithm 3),之前名為 Keccak 演算法。
Keccak 是一個加密散列演算法,由 Guido Bertoni,Joan Daemen,Michaël Peeters,以及 Gilles Van Assche 在 RadioGatún 上設計。
2012年10月2日,Keccak 被選為 NIST 散列函數競賽的勝利者。SHA-2 目前沒有出現明顯的弱點。由於對 MD5、SHA-0 和 SHA-1 出現成功的破解,NIST 感覺需要一個與之前演算法不同的,可替換的加密散列演算法,也就是現在的 SHA-3。
SHA-3 在2015年8月5日由 NIST 通過 FIPS 202 正式發表。
原理請參考: 加密技術05-哈希演算法-SHA系列原理
演算法對比