非對稱加密的設計原理是什麼?
為什麼兩個素數可以獲得非對稱加密的效果,演算法中什麼步驟是最關鍵的?
如果要自己設計私有的非對稱加密(不考慮強度),難度有多大?怎樣實現?
額。突然發現不會什麼的時候。隨口說出來的話很容易是胡扯。原回答中提到,似乎看不到自己設計的必要性。正好最近就在做這個。。。還有有意義的,經常設計的都是一些非對稱密碼,然後通過一些基礎的primitive作為building block來構造有特殊性質的密碼學演算法。這類的構造一般是能夠被證明的。所以也是現在許多密碼協議的構造方法。
===================================================
非對稱加密主要是將一個複雜的數學問題轉化成為解密的必要。其中最重要的還是單向函數(one-way function)就是就是說一個函數f,如果知道x可以輕易的計算f(x)。但是知道f(x)卻不能輕易算出x,並且這個函數最好還有一個與x有關的後門y (就是指如果知道y和f(x)就可以輕易的計算出x的值). 通常最簡單的RSA加密解密過程如下:
1、如果alice要向bob發一個信息。就先讓bob選擇一個後門參數y和N(N 為兩個大質數p,q的乘積)。因為歐拉定理我們知道x^(p-1)(q-1) mod N= 1.所以f(x) = x^y 就是這樣一個單向函數,因為f^(-1) (x)=x^((p-1)(q-1)-y) mod N 。然後bob將y和N發布出去作為公共密鑰。
2、alice 想要傳遞一個信息m。則計算f(m) mod N並發送給 Bob
3、Bob可以利用f^(-1)(f(m)) = m來獲得想要的密文。
這個加密演算法之所以可以成功主要是N不容易被質數分解否則人人都可以計算f^(-1) 這個函數了。我自己有個比較形象的比喻。就是非加密演算法就是別人想要發信息給你。你就先造一個保險箱。這個保險箱可以不用鑰匙就可以關上。你把這個保險箱給別人。別人要給你發信息就把信息放進去然後鎖上還給你。因為你有鑰匙。所以你可以知道信息。那麼要破解這個演算法除非別人能從你的保險箱結構推算出你的鑰匙的形狀。或者乾脆能撬開鎖。
至於自己設計非對稱演算法。關鍵還是要找到帶後門的單項函數。沒有怎麼仔細想過這個問題。。但是如果不要求很安全的話。應該不是太難。。但是看不出必要性在什麼地方。除非你的單項函數計算更簡單。或者密鑰所需要的長度更短。
最近正在看密碼學,回答一下正好也算給自己弄個筆記。
1、應用場景:
非對稱加密主要用於兩個場景,數據傳輸,簽名。
數據傳輸應用場景:
古代每年都進行科舉考試,考生(數據發送者)將寫好答案(明文)的紙張交給收取試卷的太監(可能發生數據泄露的網路),然後由他轉交給皇帝(數據接受者)來審閱。最開始相安無事,直到有一年太監偷看答案,將答案告訴某些王公貴族的公子。皇帝開始發現這個辦法有缺陷,於是更改了流程,發給每個考生一把鎖頭(公鑰),考試寫完答案後將答案鎖起來再交給太監,這樣太監就沒辦法偷看了。皇帝有一把能打開這些箱子的鑰匙(私鑰),這樣就保證了考生答案不會泄露。
簽名應用場景:
有一天皇帝(數據發送者)覺得東邊匈奴太囂張,發了一道聖旨(明文)給駐守邊疆的大將軍(數據接受者),匈奴太囂張了你給我懟他。太監又去送信了,結果他勾結匈奴把聖旨改了,讓大將軍撤軍。皇帝發現,這個不行啊,然後給你大將軍一把鑰匙(公鑰),自己按照又配了很多對應的鎖頭。再次發聖旨的時候,就把聖旨的摘要鎖起來。摘要很短,寫了聖旨有多少字,主要內容等(其實是按照hash函數映射出的欄位,並沒有實際意義)。
ps:不要問我為啥不鎖聖旨,因為聖旨比較長,要用的盒子比較大,也就是說加密起來比較困難,而摘要就很短,鎖進一個小盒子里就行了。
就這樣,大將軍再次收到聖旨的時候,就會拿鑰匙打開盒子中的摘要看看聖旨有沒有被篡改。
這樣進行兩步信息確認:1、盒子上的鎖頭能被打開證明這個聖旨確實是皇帝發的。2、摘要的內容和聖旨一致,證明確實內容未被篡改過。即保證2點:信息的來源,信息未被篡改。
mark,明天在答
RSA演算法原理 - 文章 - 伯樂在線
在看了密碼學書後的理解:
你自己有兩個鑰匙 一個是私匙 另一個是公匙,當甲方需要給你發消息的時候,你先把你的公匙給他,甲方利用公匙對信息進行加密,然後發出去,網路上的人都可以看到接收這個消息,但是沒有與公匙對應的私匙,他們無法解出來,只有擁有私匙的你才可以解出信息。
非對稱加密要想完全不被破解,就是要求能找到一個完全不能找到反函數的函數。
目前數學上還沒有證明,到底是否存在這樣的函數。只能說某些函數不能輕易被破解(指的是需要消耗極大的計算能力)。
因此,現在非對稱加密只是破解要花多少時間的問題,不存在絕對不能破解的演算法。網易公開課里有門 密碼學導論,我覺得很切題,生動形象且準確。稍後找下鏈接。
就我的理解,所謂對稱加密,就是 加密解密用的同樣的鑰匙,做相反的操作,就可以實現。如果加密的操作稱作x,解密的操作稱作y,就好像兩者滿足 xy=1 這樣的感覺,那麼很明顯 x 或者 y 一旦被公開,密碼就被破解了。
那麼非對稱加密,自然就是加密解密用的不同的鑰匙,兩者的關係,有點像 xy=z,其中y和z是只有你知道的,這樣你可以放心的把x公開出去,當他們想給你秘密發消息,就可以用x來加密,而他們並不知道解密的鑰匙y與加密鑰匙x之間的關係,就不能反推,但你知道,所以你就是唯一一個能解密的人,就實現了一個單向的非對稱加密通信。而非對稱加密實現的難點在於,還是xy=z,這回你得把x 和z都公開出去,自己保留y,同時保證別人捏著x 和z也不能反推出y,這就不是咱們這個乘法能搞定得了的。具體怎麼實現的,還是看視頻來的實在。推薦閱讀:
※可否提供一些「對稱可搜索加密SSE」的具體實現代碼來學習一下?
※如何快速有效的記住摩斯電碼?
※使用DES加密演算法在解密過程的相關問題?
※如何創建個人密碼或密語?
※能用cookie找回密碼嗎?