密碼學加密
Ⅰ 入門密碼學④非對稱加密
公鑰密碼(Public-key cryptography) 也稱非對稱式密碼(Asymmetric cryptography)是密碼學的一種演算法,它需要兩個密鑰,一個是公開密鑰,另一個是私有密鑰; 公鑰用作加密,私鑰則用作解密 。使用公鑰把明文加密後所得的密文,只能用相對應的私鑰才能解密並得到原本的明文,最初用來加密的公鑰不能用作解密。由於加密和解密需要兩個不同的密鑰,故被稱為非對稱加密;不同於加密和解密都使用同一個密鑰的對稱加密。公鑰可以公開,可任意向外發布;私鑰不可以公開。
1976年以前,所有的加密方法都是同一種模式:加密和解密使用同樣的規則。
1976年,由惠特菲爾德·迪菲(Bailey Whitfield Diffie)和馬丁·赫爾曼(Martin Edward Hellman)在1976年首次發表 迪菲-赫爾曼密鑰交換 。
1977年,Ralph Merkle和Martin Hellman 共同設計了一種具體的公鑰密碼演算法-- Knapsack 。
1978年,羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)共同發表了一種公鑰密碼演算法-- RSA 。
RSA 可以說是現在公鑰密碼的事實標准 。
在對稱密碼中,由於加密和解密的密鑰是相同的,因此必須向接收者配送密鑰。由於解密的密鑰必須被配送給接收者,在傳輸中的過程中存在著被竊聽的問題,這一問題稱為 密鑰配送問題 。
解決密鑰配送問題的方法有以下幾種:
RSA 是世界第一個廣泛使用的公鑰演算法,可以被用於公鑰密碼和數字簽名。RSA公開密鑰密碼體制的原理是:根據數論,尋求兩個大素數比較簡單,而將它們的乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。它的強度被認為與分解一個非常大的數字的難度有關。以現代數字計算機的當前和可預見的速度,在生成 RSA 密鑰時選擇足夠長的素數應該使該演算法無限期地安全。但是,這種信念尚未在數學上得到證明,並且可能有一種快速分解演算法或一種完全不同的破解 RSA 加密的方法。
ab = 1
然而只根據 N 和 E(注意:不是p和q)要計算出 d 是不可能的。因此,任何人都可對明文進行加密,但只有授權用戶(知道D)才可對密文解密。
RSA 是現在最為普及的一種公鑰密碼演算法,但是除了 RSA之外還有其他的公鑰密碼,基於與 RSA 等效復雜度的不同數學,包括 ElGamal 加密 、 Rabin 方式 和 橢圓曲線加密 。
在密碼學中, ElGamal 加密演算法 是一個基於迪菲-赫爾曼密鑰交換的非對稱加密演算法。它在1985年由塔希爾·蓋莫爾(Taher ElGamal)提出。ElGamal加密演算法利用了 求離散對數的困難數。
Rabin 利用了 下平方根的困難度
橢圓曲線密碼 是通過將橢圓曲線上的特定點進行特殊的乘法運算實現,它利用了這種乘法運算的逆運算非常困難這一特性。它的特點是所需的密鑰長度比 RSA 短。
Ⅱ 目前常用的加密方法主要有兩種是什麼
目前常用的加密方法主要有兩種,分別為:私有密鑰加密和公開密鑰加密。私有密鑰加密法的特點信息發送方與信息接收方均需採用同樣的密鑰,具有對稱性,也稱對稱加密。公開密鑰加密,又稱非對稱加密,採用一對密鑰,一個是私人密鑰,另一個則是公開密鑰。
私有密鑰加密
私有密鑰加密,指在計算機網路上甲、乙兩用戶之間進行通信時,發送方甲為了保護要傳輸的明文信息不被第三方竊取,採用密鑰A對信息進行加密而形成密文M並發送給接收方乙,接收方乙用同樣的一把密鑰A對收到的密文M進行解密,得到明文信息,從而完成密文通信目的的方法。
這種信息加密傳輸方式,就稱為私有密鑰加密法。
私有密鑰加密的特點:
私有密鑰加密法的一個最大特點是:信息發送方與信息接收方均需採用同樣的密鑰,具有對稱性,所以私有密鑰加密又稱為對稱密鑰加密。
私有密鑰加密原理:
私有加密演算法使用單個私鑰來加密和解密數據。由於具有密鑰的任意一方都可以使用該密鑰解密數據,因此必須保證密鑰未被授權的代理得到。
公開密鑰加密
公開密鑰加密(public-key cryptography),也稱為非對稱加密(asymmetric cryptography),一種密碼學演算法類型,在這種密碼學方法中,需要一對密鑰,一個是私人密鑰,另一個則是公開密鑰。
這兩個密鑰是數學相關,用某用戶密鑰加密後所得的信息,只能用該用戶的解密密鑰才能解密。如果知道了其中一個,並不能計算出另外一個。因此如果公開了一對密鑰中的一個,並不會危害到另外一個的秘密性質。稱公開的密鑰為公鑰;不公開的密鑰為私鑰。
Ⅲ 現代密碼學加密原理
密碼學是在區塊鏈技術中承擔著非常重要的角色,但其實,在互聯網中,也大量的使用著密碼學的技術,本文將介紹現代密碼學中的早期加密方法,這將有助於我們理解區塊鏈中的復雜演算法。
第二次大戰之後,從軍方演化而來的互聯網慢慢的進入了尋常百姓家,我們能夠將一切事物都電子化處理,交易也不例外,於是電子銀行也出現了,所有交易都可以通過網路進行。隨著互聯網用戶越來越多,新的問題產生了,加密需要雙方共享一個秘密的隨機數,也就是秘鑰,但從未謀面的兩個人,如何就此共享密鑰達成一致,而又不讓第三方監聽這知道呢?這將是現代密碼學的目標。
1976年,維特菲爾德和馬丁赫爾曼找到了一種巧妙的解決方法,讓我們用顏色為比喻來講解該技巧是如何實現的:
首先,明確我們的目標,發送者和接受者就秘密顏色達成一致,而不讓竊聽者知道,於是需要採用一種技巧,該技巧基於兩點:
一、混合兩種顏色得到第三種顏色很容易;
二、得到這種混合色後,想在此基礎上知道原來的顏色就很難了, 這就是鎖的原理。
朝一個方向容易,朝反方向難,這被稱作是單向函數。解決方案是這樣的,首先,他們公開對某種顏色達成一致,假設是黃色,然後發送者和接收者隨機選取私有顏色,混到公共的黃色中,從而掩飾掉他們的私有顏色,並且將混合顏色發給接收者,接收者知道自己的私有顏色,並將它的混合顏色發給發送者,
然後就是技巧的關鍵了,發送者和接收者將各自私有顏色加入到另一個人的混合色中,然後得到一種共享秘密顏色,此時,竊聽者無法確定這種顏色,她必須有一種私有顏色才能確定,技巧就是這樣,對密碼學的世界中, 我們需要一個數值的運算過程,這個過程向單一方向很容易,反方向會很難。
我們需要一種朝一方向易,反方向難的數值過程,於是密碼學家找到了模算數,也就是取余的函數,(比如46除12的余數是10)。
假設我們考慮用質數做模型,比如17,我們找到17的一個原根,這里是3,它具有如下重要性質,取不同冪次時,結果會在時鍾上均勻分布,3是一個生成元,取3的X次方,結果會等可能地出現在0和17中間任何整數上。
但相反的過程就難了,比如給定12,要求這是3的多少次方,這被稱為離散對數問題,這樣我們就有了單向函數,一個方向計算很容易,但反方向就很難了,已知12,我們只能採用試錯法,求出匹配的質數。
這有多難呢?如果數字很小,這還很容易,但模數是長達數百位的質數,那麼,想解密是不切實際的,即便藉助世界上最強大的計算機,要遍歷所有可能的情況,也需要上千年的時間,單向函數的強度取決於反向過程所需要的時間。
解決方案是這樣的,首先,發送者和接收者公開質模數和生成元,這里的例子中也就是17和3,然後發送者選擇一個私有的隨機數,比如15,計算315 mod 17(結果為6),然後公開將此結果發送給接收者,之後接收者選擇自己的私有隨機數,比如13,計算313mod 17(結果為12),然後公開將此結果發送給對方。
關鍵在於,將接收者的公開結果,取她的私有數字次方,以獲得共享密鑰,這里是10,接收者將發送者的公開結果,取她的私有數字次方,結果得到相同的共享密鑰,可能大家還不好理解,但他們實際上進行了相同的運算。
考慮發送者,她從接收者接收到的是12,來自313 mod 17,所以她的計算實際上是3∧13∧15 mod 17,而接收者,他從發送者那裡接收6,來自315mod17,所以他的計算實際上是3∧15∧13mod17,兩種計算結果是相同的,只是指數的順序不同,調換指數順序,結果不會改變,他們的結果都是,3取兩人私有數字次冪,沒有這些私有數字,15或13,第三方將無法求出結果。
第三方會被困在離散對數問題之中,數字足夠大時,實踐中,她在合理時限內,幾乎不可能破解,這就解決了交換密鑰的問題,這可以同偽隨機數生成器結合使用,為從未謀面的人提供通信加密。
現在區塊鏈常用的演算法,如sha256,都是繼承單向函數的設計思維,一個方向計算容易,反過來幾乎不能破解,來保證安全。
Ⅳ 密碼學HASH與對稱加密
Hash,一般翻譯做「散列」,也有直接音譯為「哈希」的,就是把任意長度的輸入通過散列演算法變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
MD5信息摘要演算法 (英語:MD5 Message-Digest Algorithm),一種被廣泛使用的 密碼散列函數 ,可以產生出一個128位(16 位元組 )的散列值(hash value),用於確保信息傳輸完整一致。2004年,證實MD5演算法無法防止碰撞(collision)(如網站: CMD5 ),因此不適用於安全性認證,如 SSL 公開密鑰認證或是 數字簽名 等用途。
MD5 是哈希演算法的一種。
密碼加密常見的有以下幾種方式:
HMAC是密鑰相關的哈希運算消息認證碼(Hash-based Message Authentication Code)的縮寫,並在 IPSec 和其他網路協議(如 SSL )中得以廣泛應用,現在已經成為事實上的Internet安全標准。它可以與任何迭代散列函數捆綁使用。
如上圖中,共有兩個流程:
授權設備登錄流程:
1、輸入賬號過後,就把賬號作為參數向伺服器發送請求
2、伺服器根據賬號生成對應的key,並傳遞給客戶端
3、客戶端拿到key,進行HMAC運算,並將運算結果的哈希值傳給伺服器
其他設備登錄流程:
1、輸入賬號過後,在本地緩存中找伺服器傳過來的key,有就登錄,沒有就把賬號作為參數向伺服器發送請求
2、伺服器要先看這個賬號是否開啟了設備鎖,沒有開啟就不允許登錄,開啟了,就向授權設備發送請求,是否授權,如果授權,就將這個賬號的key傳給其他客戶端
3、客戶端拿到key,進行HMAC運算,並將運算結果的哈希值傳給伺服器
但是在這之中有一個潛在的安全隱患問題: 當別人拿到賬號和傳遞的哈希值過後,也就能拿到登錄許可權,從而不安全。
為了防止上面的問題,注冊流程不變,伺服器還是保存的有加了key的HMAC哈希值。
1、只是登錄的時候,客戶端將哈希值與時間戳拼接過後,進行MD5加密,再傳給伺服器。
2、伺服器將注冊保存的賬號對應的HMAC哈希值,分別與當前時間,和前一分鍾拼接再MD5加密,再和客戶端傳過來的進行匹配,匹配成功則登錄成功,否則不成功。
3、注意這里的時間戳是伺服器給的時間戳。
常見的加密演算法:
應用模式:
AES加密解密都是用到的CCCrypt函數,並且需要導入 CommonCrypto 框架。
Ⅳ 密碼學基礎(二):對稱加密
加密和解密使用相同的秘鑰稱為對稱加密。
DES:已經淘汰
3DES:相對於DES有所加強,但是仍然存在較大風險
AES:全新的對稱加密演算法。
特點決定使用場景,對稱加密擁有如下特點:
速度快,可用於頻率很高的加密場景。
使用同一個秘鑰進行加密和解密。
可選按照128、192、256位為一組的加密方式,加密後的輸出值為所選分組位數的倍數。密鑰的長度不同,推薦加密輪數也不同,加密強度也更強。
例如:
AES加密結果的長度由原字元串長度決定:一個字元為1byte=4bit,一個字元串為n+1byte,因為最後一位為'