學過密碼學的人會不會自己創造一套密碼?
感覺這個逼格很高啊 有誰會嗎 最好給個例子
看到這個問題沒有什麼很讓我覺得滿意的答案,所以手機上簡單回答一下。
誰說沒人設計密碼學系統的…但是現在的設計一般都是非對稱加密體制,因為這種加密體制是「可證明安全」的,所以完全可以自己設計一套加密體制,然後形式化證明了方案的安全性。換句話說,要是不能自己設計新的密碼體制,那密碼學如何繼續發展啊?
不過話說回來,密碼學本身的發展非常快,而工業界對於密碼學的使用基本停留在15年前左右的成果。不過,這個現象是正常的,其實大多數技術從提出到使用都需要10-20年呢。
什麼?你問我有設計密碼系統的能力嗎?那就谷歌學術中搜索下我的名字唄…如果上過大學密碼學課算是「學過」的話,我想對於正常人來說應該是:學過之後就不會想自己發明一個加密演算法了。
P.S. 學完還會這麼想的人要麼是智商太低沒好好上課,要麼是智商高數學好走上研究道路。來自coursera斯坦福的密碼學第一課ppt第九頁,課程剛開始,想湊熱鬧的同學請不要錯過Coursera - Free Online Courses From Top Universities
這個類似在問:學過C語言的人會不會自己寫個操作系統出來?
答案:看學得夠不夠好。
CRYPTO 2014
CRYPTO(密碼學)2014年會論文列表。連量子演算法相關的保密方法都已經有人出了論文了。
可以創造,但是實際場景不要用。
對於一個非資深的密碼研究人員,學完密碼學之後,除了領悟以上大多數答主的提到的一個基本原則:不要嘗試設計密碼系統,即使是ad-hoc的密碼演算法,還要領悟到:不要使用自己實現的密碼演算法,切記!
這個學期半路出家去聽了個密碼學的課,來試著答一下。
正如樓上貼的PPT截圖,你自己造的密碼大多都有被破解的風險。因為人類的直覺是不嚴謹的,即使是依據現代密碼學的理論設計一套密碼,也要謹記「良好的設計不一定能被良好地實現」這一原則。所以沒有特殊需要的話,有現成的就還是用現成的吧。。
舉個例子,MD5, SHA-1 這些基於現代密碼學理論設計的加密hash,大家用了那麼多年,後來不也還是被找出了漏洞。[1]
設計加密演算法這些東西,首先是要嚴格基於現代密碼學理論設計,核心思想是均勻隨機且key space足夠大。其次也很重要的就是把加密演算法(甚至實現)公開,讓大家挑刺(public scrutiny),如果很長時間都沒有人能發現漏洞,時間越長我們越傾向於認為它是安全的。(當然有可能有人發現漏洞不公開容然後自己做壞事)
所以美國國家標準技術研究所在徵集下一代加密hash (SHA-3) 用了將近5年 [2],就是要讓參選的演算法經歷足夠多的考驗,才敢放心地用啊。
所以你覺得靈機一動設計的加密演算法,真正安全的概率有多大?或者拿去參加[2]這種competition試試?
[1]MD5[2]NIST hash function competition基本不會。
想YY一套加密解密體系還是簡單的。例如現在我來YY一個加密演算法,把原文中的每一個字母都向後移一位,比如a加密後變為b。那麼明文"i love u"在加密之後應該生成了密文"j mpwf v"。一般人是無法通過"j mpwf v"來判斷我的原文是什麼的。這就是我創造的密碼系統。
但是,沒人做這麼無聊的事情,因為學過密碼學的人都知道這種YY很low啊(不排除有大牛)。而那些真正能夠經受住考驗(不能在短時間內被輕易破解)的加密解密演算法都不是輕輕鬆鬆能夠創造出來的。舉栗子。
1.MD5,現在常用在登錄驗證等方面的摘要演算法,1991年提出。使用場景舉例,對很多網站而言,用戶的密碼是以MD5經Hash運算後存儲在文件系統中,當用戶登錄的時候,系統把用戶輸入的密碼進行MD5 Hash運算,然後再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。
2.RSA,支付寶使用的信息加密演算法,1977年提出。(1)可以創造新演算法,有些人創造了RSA。有些人創造了雙魚。有些人....(2)微調參數(基於一些演算法可行)(3)使用標準演算法,多層密碼演算法混合,混淆替換之前自己加一點改變,也算創建了一套密碼。(你這樣搞,NSA哭了)
看情況,主要是沒有需求。否則自己設計演算法是夠嗆,不過如果換套幻數或者換個橢圓曲線還是可以的。
最後,一個好的密碼設計絕不等於一個好的密碼設計實現。
簡單地說:
- 現有的加密演算法和協議都是人發明/設計的。
- 因此,不要輕易發明自己的加密演算法/協議,其實是說給不懂得其中難處的人聽的。
- 懂得其中難處的人,除非確有把握,自然不會輕易去發明加密演算法/協議。
去看看DES是如何設計的,估計也就沒什麼想法了,...
現在的技術是破譯強與編譯
推薦閱讀:
※在讀密碼學英文文獻的時候,總是會遇到一些專業辭彙或短語搭配,但是上網查找又查不到,有什麼好辦法呢?
※密碼設置的很複雜有用嗎?
※RSA 生成公私鑰時質數是怎麼選的?
※究竟什麼才是隨機預言機(random oracle)呢?
※如何看待雲舒對「可信計算」與「密碼學」的評價?