在有限專家間評議加密演算法是不是比直接公開更安全?

感覺從管理上進行專業水平和誠信信度考量後,專門指定一個人員可控的專家組,在組內公開新設計的密碼演算法進行同行評議,然後交給人員可控,保證水平和信度的編程團隊閉源實現和內部測試,從人員管理上避免社工攻擊的發生,同時將演算法和密鑰同時保密,這樣才是最安全的吧?
畢竟說起來給一段密文,不告訴你加密演算法,你就是知道密鑰也不好破譯吧?為什麼一定要對全公共領域公開呢?
————————————————
關於閉門造車這個問題,我只是覺得,數學發展到今天,能夠對行業造成巨大進步的專家應該真是數的過來了吧。那麼把這群專家聚在小屋裡造車究竟為什麼不行呢?大家是擔心民間正義的科學家真的會證明那些前沿數學猜想,完善物理理論,設計思想實驗了嗎?


這是一個經典問題了,常常被問起。其他回答有些已經從專業角度進行了闡述。我嘗試從通俗的角度再補充一下。

一、應用於大眾領域的密碼學卻要實現演算法保密?一個不可能的任務

一提起密碼學,大家第一反應是聯想到戰爭、軍事,但如今的世界,密碼學最廣泛也是最基本的用途卻是在保護普通人的通信安全——比如讓你在使用網銀的時候密碼不會被其他人截獲進而偷走你的錢。

站在這個角度看,很快就會發現,要想讓全世界70億人口仰仗一種不公開的加密演算法隱約存在一些障礙。不過,在開始討論之前,我們還是先做一些非常非常理想(而不切實際的)假設:

1、演算法的締造者是頂級專家具有深入的知識
2、演算法沒有包含任何的後門,不會被特殊的政治集團利用
3、演算法的保密性極佳沒有任何機構有能力竊取
4、全世界一致同意接受這一演算法

在如此烏托邦般理想的背景下,全世界滿心歡喜,翹首以待,希望立刻使用這一演算法來保障全世界的通信安全!(此處應有BGM,世界500強CEO歡聚一堂紛紛豎起大拇指對提出這一演算法天才致以最高的敬意——雖然並沒有人知道他是怎麼做到的——而且我也不清楚大家怎麼就能如此單純的相信他說的是真的……)

就在這歡聲笑語一片祥和,世界大同的瞬間,有一個工程師突然發現了一個問題——怎麼才能把這個演算法用起來呢?另一個工程師也恍然大悟,一拍大腿脫口而出:是啊,演算法他媽的根本沒公開啊!

全世界都愣住了,光忙著慶祝,卻忽略了一個問題——除了演算法的作者誰也不知道怎麼去加密和解密,沒人能寫出演算法!怎麼辦?

這時候隔壁老王提提褲子站了起來,提議由演算法的發明人,定製一種硬體晶元,秘密製造,然後在不公開其硬體構造的情況下,統一分發給大家!

熱烈的掌聲,經久不息。但老張不樂意了,老張站起來緩緩道:硬體好是好,但是我們公司的幾億台嵌入式設備已經在運行,要升級硬體難度太大。首先你的晶元有多大,尺寸太大肯定不行,我們的設備體積有限;耗電多少,太耗電那也行不通;速度呢,能達到每秒處理 X Mbit 嗎?我們的系統是硬實時系統,響應時間不能超過 Y ms……如果可以,還有個問題,價格呢?如果太貴,我們怕是要破產。而且硬體的東西,做上去就無法更改了,你們最好一次做對,要是出問題想改那也是難吶……

會場陷入了一片沉默……一些工程師開始交頭接耳。老張頓了頓,說道:可以搞軟體的嘛,提供一個預編譯好的二進位庫給我們就行了,這樣我們不用升級硬體,也能用上這項偉大的發明!

演算法的發明人經過短暫的考慮,微笑著點點頭表示了同意。笑容又出現在每個人的臉上。除了會場角落的一群人……

他們輕蔑的看著狂歡的人群,為他們的天真報以最深的同情——這是一群安全研究人員,就在上個月,他們破解了一個被認為「絕對安全」的晶元,完全逆向出了其中的演算法。在他們眼中,這場鬧劇雖然可笑,但卻也是一個悶聲發大財的絕佳機會……

講這個段子只是為了提醒你:

  1. 任何保密的演算法一旦變成了硬體,就有可能被逆向還原
  2. 同上,任何保密演算法一旦變成了軟體,就有可能被逆向還原(實際上不是有可能而是一定可以)
  3. 上述兩條在可以預見的未來依然成立

所以結論:演算法的保密性在現實世界行不通。甚至可以說,任何想要大規模廣泛應用保護幾十億人的密碼學演算法,都根本無法實現保密,最終不管是你願意還是不願意都會公開。原因是,演算法要給人用,就要變為硬體或者軟體,而這二者都不安全,可以通過研究它們逆向還原出演算法。

二、通過嚴密的管理措施在軍事上實現演算法保密?另一種幻想

上面聊完了民用,我們知道一點,一旦需要[廣泛]應用一種加密演算法,那麼保密就是不可能的。接下來我們考慮軍事環境下,能否實現加密演算法的保密呢?

在理想的世界裡,好人和壞人涇渭分明;英雄的意志如同鋼鐵般從不會被誘惑;每一個兢兢業業的軍人如同機器般準確,從不犯錯……

可惜現實世界裡的軍隊絕非如此,光是間諜問題就解決不了。間諜也許偷不走你的演算法設計文檔,但他/她可以偷走你安裝了相應加解密晶元的設備,於是問題又回到和前述類似的情況,你的演算法很可能被逆向還原……

而更實際的情況其實是,在軍事領域,直接收買/綁架/威脅相關人員更加方便,破解晶元有時候反而純屬多餘。這方面二戰中已經數不勝數。都是血淚教訓。

三、可是,如果公開的是安全的,那麼我將其再做保密不是[更加]安全么?一個思維陷阱

這可能是提問者最困惑的問題。這就相當於,如果你們口口聲聲說公開的最安全,那麼我把它再做一層保護,也就是保密起來,那不是雙保險?!

這樣的想法,其實是一種變相的循環論證:

  1. 一個演算法,敢叫安全的,一個專家說了不算,十個也不算,所有專家都這麼說才算,所以你得[公開]了,最後才敢叫安全
  2. 你都保密了,就沒有人知道它到底安全不安全,只有一小撮人[認為]它安全,所以你保密的是一個[安全]的演算法嗎?也許是,也許不是
  3. 歷史經驗證明,發明安全的演算法難度之高,遠超想像,由此可知,在 2 的情況下,你小心翼翼維護的所謂[安全]演算法 99.99% 其實是個不堪一擊的東西

所以,根本原因是,安全不是[天生]屬性,而是公開後[實踐]賦予的衍生屬性。你無法在保密一個東西的同時確定它是安全的,你只能[自認為]它是。


四、別忘了,公開挑戰全世界並獲勝是現代密碼學膽敢聲稱安全的唯一標準

  1. 現實世界的任何加密演算法賦予的安全性都是[有限]的,實際上加密演算法只是在不斷的抬升[破解的代價]而已,主要是時間代價
  2. 因此完美的,絕對的加密演算法在現實世界不存在
  3. 由上可知,幾乎沒有人真正能夠判定一個加密演算法是否[安全],只能以有限的知識對其進行估計,但經過大眾的參與,一些久經考驗的加密演算法被發現[很難]破解,我們才可以謹慎認為它們相對安全

仔細想想就會發現,其實現代密碼學最大的進步就是承認了不完美,這一點可以說是經典密碼學到現代密碼學精神內核上最本質的區別,也改變了密碼學研究的方向。究竟需要多大的膽量,才可以把自己的演算法公之於眾的同時,聲稱它是安全的?同時當全世界絞盡腦汁都無法將其撼動分毫時,作者內心會感受到多高的榮譽?

這是一種極致的挑戰精神。也是人類智慧的極致體現。

五、反常提示

無需知道加密演算法,也可能構造出解密演算法,這一點可能讓很多人意外:

加密演算法本質都是一個函數 F。而與其相對的解謎演算法可以稱為 F"。這很好理解。問題是,構造 F" 一定要知道 F 嗎?能否在不知道原始加密演算法的情況下,直接構造一個函數來實現和 F" 相同的解密功能?實際上是有可能的,如果有大量的明文和密文對(這個條件通常很容易滿足),然後 F 滿足特定的數學性質,那麼就可以找到一個 U 函數,實現 F" 的功能。

重複加密多次,或者混用多種不同的加密演算法,可能降低安全性:

如果加密一次會變得安全的話,那麼加密兩次、三次、四次呢?是否更加安全?事實上可能恰恰相反,安全性有可能反而降低。混用加密演算法也會帶來此類問題。這一點也常常讓人意外。

密鑰長度越長越安全?不一定:

特定的加密演算法,某些長度的密鑰有助於增強安全性,而另一些則會削弱,這實際是一個很複雜的問題。實際上好的加密演算法至少保證密鑰長度增長的同時安全性增強,但許多演算法並不能在這方面給予保證,讓人很意外。

同一個加密演算法,選擇兩個相同長度的密鑰 X 和 Y,它們加密出來的結果一樣安全嗎?不一定:

存在弱密鑰,不幸選中這些密鑰會導致安全性下降,有時問題可能會很嚴重。

其它各種坑就不說了,請參考專業書籍……你了解的越多,你終將會發現,密碼學真的非常非常複雜,因此如果誰膽敢聲稱安全,即使是這個行業的頂級人員,也常常被打臉。一般只敢提出一些新想法啟發思路。而證明其安全性是一個很漫長的過程。

沒有哪個小圈子強大到提問者想像的那個理想程度。


不邀自答。

看了很多答主的答案,也看了題主在各個回答下的評論,忍不住來答一答。

其實這個題是一個很有意思的問題。這個問題的答案並非我們想像的那麼簡單,我不妨拋磚引玉,給出一個可能的解釋,請其他知友進行補充,如何?

題主的問題我覺得是非常嚴格的:

從管理上進行專業水平誠信信度考量後,專門指定一個人員可控的專家組,在組內公開新設計的密碼演算法進行同行評議,然後交給人員可控,保證水平和信度的編程團隊閉源實現和內部測試。

題主假設所涉及的演算法是通過具有專業領域知識的專家組設計和測試,再由可靠的編程團隊閉源實現和測試的。也就是說,我們需要假定這個演算法本身被認為是安全和可靠的。

這樣所設計和使用的演算法,在閉源環境下可以假定演算法的安全性更高了。但反過來,這樣的設計反而又降低了系統的實際安全性,而又帶來了更高的管理成本。我好像給出了一個看似互相矛盾的結論啊?注意,前者我使用的是假定演算法的安全性,後者我使用的是系統的實際安全性。在密碼學的發展歷程中,確實出現了這樣的事件。

這裡要澄清一下,密碼學可不僅僅有那些我們都知道的演算法,如DES、AES、RSA、SHA系列什麼的。在密碼學發展的歷史長河中,學者和專家們提出過無數種演算法。而所有這些演算法最後沉澱下來的就剩下我們廣泛接受,寫在課本裡面的這幾個演算法了。其他演算法,或者效率不高,或者被其他學者專家在短時間或者長時間內所攻破。今天我們就來看看密碼學演算法的設計和攻破的流程。我認為,這個流程就能回答答主的問題了。

=======分=======隔=======符=======
一個演算法公開的安全事件

1997年,密碼學界三位頂級密碼學研究者Goldreich,Goldwasser,Halevi在密碼學頂級會議CRYPTO上發表論文《Public-key cryptosystems from lattice reduction problems》,提出了一個基於格的數字簽名方案,這個方案在密碼學歷史上被稱為GGH方案。這個方案本質上不能說是一種具體的方案,而是一種簽名方案的構造框架,可以在這個框架上應用不同的格,可以構造出不同的數字簽名方案。

當時密碼學界還沒有廣泛接受形式化安全證明,所以這個方案提出時,三位頂級學者並沒有給出方案的安全性證明。這個方案經過未來數年的研究,也沒有人能夠證明方案的安全性。當然了,也沒有人提出針對方案的攻擊演算法。2001年,密碼學頂級研究者Hoffstein,Howgrave-Graham,Pipher,Silverman,Whyte提出了GGH方案的一個具體事例,叫做NTRUSign簽名方案。之所以叫NTRU,是因為這個方案的具體構造使用了NTRU公司建議使用的NTRU格代數結構。當然了,這個格代數結構有點複雜,我這裡就不講了。有趣的是,NTRUSign簽名方案是在2001年提出的,但相關論文是2003年在密碼學著名會議CT-RSA上發表的,題目為《NTRUSIGN: Digital signatures using the NTRU lattice》。

這個方案有什麼好處呢?這個方案最大的好處是效率特別高。簽名結果的長度大約為1700比特。簽名和驗證的速度非常快,甚至比RSA簽名方案還要快。同時,由於這個方案是基於格構造的,所以甚至人們認為這個演算法可以抵抗量子計算機的攻擊。這個方案是GGH數字簽名方案構造框架的實現。在那時,GGH框架沒有發現什麼漏洞,NTRU格也沒發現什麼問題(到現在,NTRU格也被廣泛用於密碼學方案構造中)。這麼好的演算法,沒有道理不成為標準啊。在2002年,IEEE P1363.1的version 8標準中正式收錄了這個方案,作為數字簽名演算法的標準。

我放的兩個圖中,講解的這個人叫Oded Regev。這個人於2006年,在密碼學頂級會議EUROCRYPT上發表了論文《Learning a parallelepiped: Cryptanalysis of GGH and NTRU signatures》。在論文中,Oded提出了一種攻擊GGH框架的演算法,在已知400個消息/簽名對的情況下,可以在很高安全常數設定下,在幾分鐘內破解GGH框架的方案,以及NTRUSign方案,而且破解的結果是直接得到簽名的私鑰。基本上,IEEE P1363.1中給出參數中,基於GGH的簽名方案的一半具體參數都被攻破了。而我放上來的圖,就是Oded在Winter School on Cryptography 2012上講解它的攻擊方案(2nd BIU Winter School)。

看到這裡,題主可能會說了:看吧!演算法公開了,結果被破解了,還是不公開的好!但實際上,我們注意一下演算法攻擊的要求:要知道400個相同私鑰下的消息/簽名對才可以攻擊成功。但在實際中,想拿到400個同一個私鑰下的消息/簽名對似乎並不簡單。很可能還沒簽署那麼多簽名,公/私鑰就更新了。所以,這個攻擊演算法從實際角度說確實破解了GGH方案和NTRUSign方案,但是在簽名次數較少的前提下,方案還是可以使用的。這也就意味著,雖然方案不安全了,但是也沒那麼不安全,我們至少知道方案在什麼條件下是不安全的,並且可以在全世界範圍內逐漸更新演算法庫,將有問題的演算法更新掉,從而減小損失。

從這方面講,演算法的公開是有意義的。一個經過精挑細選的演算法,破解的難度是非常大的。整個破解需要數年,甚至數十年的努力。各種專家、學者不停地對演算法進行研究,逐漸在限制條件比較小的前提下破解方案。同時,由於演算法的破解本身也是公開的研究成果。頂級學者專家會公開某一著名演算法的破解進度。這樣,業內的人士就可以逐漸了解到,演算法被攻擊到什麼程度,是否需要設計並提出新的演算法,是否需要對演算法進行更新了。從這個角度上說,演算法的公開是否從某種程度上提高了系統的安全性呢?

=======分=======隔=======符=======
一個演算法保密的安全事件


現在已經是4G時代了,原來的2G手機相信大家早已經扔掉,或者放在時間膠囊裡面了吧… 在2G手機的通信過程中,實際上也使用了密碼學演算法,就是A3、A5和A8演算法。其中:

  • A3演算法是SIM卡的身份認證演算法。
  • A5演算法是通信的加密演算法。其中包括1987年提出的A5/1演算法,和1989年提出的A5/2演算法。
  • A8演算法是A5演算法執行之前所使用的密鑰分發演算法。

我們這裡僅談一談加密演算法A5。在早期,為了基站資源的壟斷,同時也為了保護通信數據的安全性,A5系列演算法都是保密的。然而,在1994年,一位通信界的匿名用戶(匿名用戶很可怕…)公開了兩個演算法的設計思路。1999年,Marc Briceno從GSM電話中,通過逆向工程技術完全恢復了兩個演算法。

在演算法設計之初,所有人都希望演算法是安全的。在1987年和1989年,A5系列演算法的設計者們想必也是領域內的傑出專家,所設計的演算法肯定也值得信賴。然而,由於演算法的保密性,A5系列演算法一直沒有得到學者們的深入研究。但是,由於1999年演算法的徹底暴露,各個領域的學者專家們,用將近10年發展出的數學和密碼學思想直接分析10年前提出的密碼學演算法,自然很快找到了漏洞。

早在1999年,Jovan Dj. Goli?就在密碼學頂級會議CRYPTO上發表論文《Cryptanalysis of Alleged A5 Stream Cipher》(注意這個Alleged,當時演算法還沒有完全被逆向工程恢復出來),直接從演算法的構造思路分析演算法的安全性,指出A5系列演算法存在安全漏洞。在演算法被逆向工程完全恢復出來的次年,Alex Biryukov,Adi Shamir(沒錯,就是RSA中的S),以及David Wagner於2000年在密碼學著名會議FSE上發表論文《Real Time Cryptanalysis of A5/1 on a PC》,他們指出,如果能得知2分鐘通話時間內的明文和密文消息,就可以在1秒鐘內恢復密鑰。不過,這個攻擊首先需要預計算大約300GB的數據。到2004-2005年,演算法基本已經被徹底攻破了。

由於演算法的保密,一旦演算法在未來被泄露,學者們使用未來所研究的攻擊方法對之前設計的演算法進行攻擊,很容易找到其中的漏洞,並在幾年之內徹底破解演算法,完全不給系統安全的設計者更新演算法的時間。要知道,截至2011年,全世界仍有10億人在使用A5演算法進行通信!

=======分=======隔=======符=======
總結

所以,演算法保密當然有它的道理。如果真的保證演算法的嚴格保密,在閉環中使用演算法的話,在較長時間內當然可以保證演算法的安全性。但是,一旦未來的某一天,演算法被泄露出去。專家學者們使用未來的攻擊演算法進行破解,很可能在非常短的時間內破解演算法,使得安全工程師們完全沒有機會快速對演算法進行更新。

既然這樣,為何要花費如此多的人力、物力,保證演算法的保密性?反過來,直接公開演算法,供學者們進行充分研究,等演算法的破解與更新趨於穩定後,制定相關的標準,並隨時對標準進行更新和補充,這樣不是更好?

既能節省成本,又能提高系統的安全性,何樂而不為呢?


在 19 世紀後期,Kerckhoffs 發表了一篇論文來闡述這個問題。他認為加密方法不必保密,需要保密的是密鑰。原因有三個:

  1. 與維護演算法的保密性相比,維護密鑰的保密性更容易。一個密鑰可能只有 100bit ,而安全地保存一個長度數千倍的加密演算法要難得多。而且演算法的細節可能泄露,不止是內部專家,逆向工程也可能學習到一些細節。
  2. 萬一密鑰暴露了,Alice 和 Bob 可以很容易地更換密鑰;而萬一演算法被攻破,重新設計一個很好的加密演算法要難得多。事實上,我們需要定期更換密鑰,這種情況下保證加密演算法的保密性簡直不可能。
  3. 萬一有多對人員需要加密其通信,這些人可以使用相同的演算法和不同的密鑰,而使用不同的程序則太難。

與之相比,開放密碼學設計則有如下四點優勢:

  1. 公開的設計可以承受公開的鑽研和分析,因此可以更加強壯。構造良好的密碼學方案非常困難,更廣泛地被研究可以證明其安全性。
  2. 公開後有更大的可能被正義黑客發現,比被敵人發現要好。
  3. 系統的安全取決於演算法的保密性,對代碼的逆向抵抗力很差。密鑰不是代碼的一部分,不存在這個問題。
  4. 公開設計使標準更容易建立。

@王希@劉巍然-學酥 同學已經說得很好了,我從成本方面說一下。

交給人員可控保證水平和信度的編程團隊閉源實現和內部測試,從人員管理上避免社工攻擊的發生,同時將演算法和密鑰同時保密。

因為密碼學演算法的保密本身也是需要成本的。公鑰密碼學僅僅是為了管理公鑰、進行密鑰合法性的檢驗,就引入了認證中心的概念。由此來看,很難想像為了管理演算法獲取權、分發機制需要建立多麼複雜的驗證機制。而如果僅僅是把密鑰保密而演算法公開,「人員可控」,「保證水平和可信度的團隊」,「人員管理以避免社工」這三方面的開銷都可以減到最低,而優點則是換來了海量的密碼學研究人員幫忙審閱演算法的可用性。況且,在保密方面,人,總是不如演算法所依賴的數學規律可靠的。

我大概猜到了題主的意思。演算法不公開並沒有什麼問題。部隊的軍用演算法,甚至是部分的商用演算法也是不公開的。但是,其目的並不是為了保密性的提高,而是僅僅是為了增加破解的成本而已,甚至僅僅是為了讓不懂行的上級認為「更安全」鵝以(滑稽臉。而它們中的絕大部分,也都是基於公開的密碼學演算法進行改進實現的(比如換條橢圓曲線啦什麼的)。


密碼學問題歸根結底是(加密/破解)成本問題。目前建立在證書機制上的web登錄框架,甚至可以把臨時會話的token更新時間壓縮到1min以內,這是因為演算法本身是預先部署於client和server上的,密鑰的交換根本用不了太多的時間。如果演算法保密,難道演算法每隔一分鐘在全球重新部署一次嗎?

另外,輪子哥哥 @vczh的說法並不嚴謹。例如,我用ASIC或者FPGA實現了一套演算法,總共使用了10億個晶體管,其中絕大部分是誠心混淆用的,那麼晶元的酸洗+電子顯微鏡快照進行破解,終歸是要以年計算的時間的(依然是成本問題)。這對於部分秘密的破解來說,時間開銷和設備、人力成本開銷也是不可接受的。所以「軟體能逆向,所以乾脆演算法公開」並不是密碼學演算法公開的理由, @王希@劉巍然-學酥 說的理由才是。


密碼學的安全不能建立在「演算法的保密性」基礎上。否則你會死得很慘。
1,內部人員泄密怎麼辦?萬一有人叛逃,比如再來個斯諾登。
2,外部破解了演算法怎麼辦?比如二戰時美國破解了日本和德國的密碼演算法。
最重要的是,對手早破解了,你們還蒙在鼓裡,自以為安全呢,結果被對手不斷利用。比如日本和德國二戰失敗的一個重要原因就是密碼演算法被破譯,卻長期渾然不知。

相反,加密演算法公開的一個重要原因就是,能夠吸引全世界的密碼學專家來研究和破解。一旦被破解,演算法就會被作廢。這樣做的好處就是,確保你使用的演算法的安全性,至少在已知的公開密碼學範圍內,是非常安全的。比如RSA 2048,演算法原理很簡單,破解方法也很簡單,只要你CPU計算能力足夠強,但問題是,目前世界上還找不到這麼強能力的CPU,即使把這些電腦全部加起來。等CPU能力不斷提升後,那就再提升一下RSA的密鑰長度,比如4096位。

當然,有些機構比如NSA,破解了也不一定會公開。這個就無解了,這種層面遠不是一般的商業機構和企業需要擔心的,它比拼的是國家的綜合實力和數學智力。

不是相信別國的科學家,是相信數學知識和科學真理。你知道RSA為什麼安全嗎?它建立在大數因式分解很困難的基礎上。你知道DH為什麼安全嗎?它建立在離散對數求取很困難的基礎上。演算法都公開了,原理和代碼都擺在那了,誰要你相信它國?誰要你相信它國的科學家了?自己不會看?


從二戰後,加密演算法公開是加密的基本原則之一!
首先,依賴於保密演算法流程是極度不安全的,這一原則也是在經歷過慘痛的教訓後才得出的教訓,因此我們可以看到,從之前的DES到現在廣泛使用的AES和RSA,以及橢圓曲線,都是公開演算法的。加密的複雜度均是依賴於數學計算的難度或者一些目前不可解的數學問題。其次,任何加密演算法必須寫入到軟體或者硬體中才能發揮作用,但是軟體可以被反彙編,硬體可以被專業搞電子的進行逆向開發洗板,一層層了解到整個電路,進而獲得演算法的流程,這是無法避免的。我國的電子晶元行業也憑藉這個方法獲得了很多突破。因此,依靠保密演算法是不靠譜的。
對了,捎帶說一句,對於國密從SM1到現在的SM4,SHA256,很多演算法不公開的原因不是因為我們要依靠保密演算法來保密,而是我共一貫的風格,涉及到軍事政治等方面的一律保密,就和前幾年連部隊番號都是保密的一樣。
所以,除了知識產權,沒什麼好擔心的。


看了下題主在各回答下的評論。。
完全是強詞奪理嘛。。
你願意這麼干你自己去試試好了,不願意好好和別人交流來知乎問幹嗎
Just do it.
U Can U UP No BB
祝演算法永不泄漏。


湊個熱鬧。
密碼學安全里除了「保密」(confidentiality),另外一個很讓人困擾、覺得難以解決的問題就是「可信」(trust, 包含至少integrity和authnticatibility)。我們總需要相信些什麼,比如密鑰分布的平均隨機性,安全的公私鑰分發,受保護的信道等等。
實際部署中,我們需要相信CA,相信系統預置的證書,相信加密演算法的實現。而這些往往基於對CA維護者(可能是政府),軟體廠商(微軟、谷歌)的信任。這種信任,同樣在不停地被專業人員(研究者、白帽子)和非專業人員不停地拷問著。
而小範圍、步步嚴控,又沒辦法向外界說明的演算法以及它的評審標準,怎麼取信第三方使用者?難道又是那句「不管你信不信,反正我是信了」?


Enigma 的故事已經告訴我們,靠對演算法的保密提高保密性能是不靠譜的。保密還得靠保護秘鑰。


把軟體逆了不就知道演算法的一部分了嗎(


仔細看了大家的回答和題主的一些發言,題主主要有兩個觀點
1. 召集最頂尖的專家在封閉條件下可以造出公開演算法環境下更安全的演算法;
2. 軍事科技都是保密的,說明封閉環境下確實有更先進的技術;

但是事實上這兩個觀點都是有失偏頗的,
首先討論第二個觀點: 是否不公開的技術意味著更先進呢?
我認為是也不是,這裡本質上是一個理論研究與工程研究的問題。
我的觀點是: 那些軍工技術、商業機密什麼的,更多的是工程實踐上技術更先進,但從基礎理論看的話,是不會突破現有理論的。
正如 @之幽說的, 軍方用的加密技術,演算法基本上還是公開的那一些,只是說他們選取了一條特別的橢圓曲線而已。
拿軍事上造飛機來類比,密碼學演算法本質上相當於流體力學那些東西。
流體力學理論告訴大家,造飛機飛到天上是可行的,但飛機具體細節參數,就屬於工程技術了;
密碼學理論告訴大家,演算法這麼寫是難以破解的,而具體演算法的細節參數(選取哪一條橢圓曲線,padding怎麼填)什麼的,也是工程技術。
而所謂軍事科技商業機密啥的,大抵屬於工程技術,而跟基礎理論關係不大。

然後對於第一個觀點,我認為題主低估了現代科學的複雜程度,
首先,我不認為存在所謂「最頂尖的專家」, 現代數學、計算機科學的分支是非常多的,還真不是能簡單地數出來的。
而且現代科學研究基本不是那種單個單個人的組織模式,你看到的一個個「專家」基本上都是一個一個的group,裡面有助理教授、博士後、博士等等。
更常見的情況是專家本人大概想了一個大致的思路,然後讓下面小弟們具體去研究這個思路是否走得通,然後一點一點做出來的。
只是召集若干個「專家」大抵是不行的,而召集若干個專家的group話.. 那其實就幾乎是把整個領域的人給召集起來了,跟「公開」也沒多大區別了。
反正真正會去破解這些演算法的人都在這個領域裡,公開不公開給普通人,真沒啥關係。


先說結論:密碼演算法的設計是科學(數學),而安全是實踐。密碼演算法的安全性不是一個理論問題,而是一個工程和實踐問題,所以沒有絕對的是或非這樣的答案。

在當前的實踐中,中外各國的最高機密系統基本上都在使用未公開的加密演算法。但(!)是(!),那並不是因為那些保密演算法一定比目前的公開演算法更優秀(呃,怎麼定義「更優秀」?漏洞更少?加密佔有資源佔用更少而解密佔有資源更多?都不一定,具體的系統各有不一樣的定義和需求),而是因為保密演算法在它們使用場景下的綜合成本更低。

比較兩種做法:第一種是找一幫研究密碼的專家設計一套演算法,再找一幫很厲害的人分別做軟硬體實現,然後交給那些信得過的人只在特定的場景下使用;第二種是廣泛徵求各方推薦和反駁,公開演算法和實現,所有人都可以公開使用。

這兩種做法的安全性哪個更高呢?別急著回答。如果對密碼相關行業有所了解,應該很明確地知道,第一種在包括國密辦系統和NSA是廣泛存在的,第二種則是NIST確定新演算法(如AES和SHA-3)的基本流程。

現在的密碼學教科書都是支持公開密碼演算法的,然而這種支持的落腳點是密碼系統的安全性不能依賴演算法保密,而不是說密碼演算法的保密毫無意義。誰說我用保密的演算法就不用密鑰了?不知道演算法也能破解,也並不意味著演算法保密不能增加破解難度啊。

實際上,對公開演算法的研究並不是完全公開的,畢竟「科學無國界,但科學家都有自己的祖國」。就說王小雲教授在公布對SHA-1攻擊的進展時,就有人懷疑實際取得進展的時間要比消息披露早不少呢。軟體漏洞有0-day,演算法的不足也可以有,甚至一定有。

當然,演算法公開的好處其他人說得很充分,我就不贅述了。

最後要說的是,看了題主在其他答案下的回復,我的看法與很多人一樣,題主並不明白自己在問的在說的到底是什麼,對很多概念缺乏基本的了解。雖然我的答案可能基本滿足題主的需要(2333),我還是建議題主去找本密碼學教科書從頭看起。。。



題主不是想問問題的,只不過是想找到支持他自己的意見的人罷了。
至於跟他意見不一樣的人,還是不要浪費口舌了,散了吧。


實名反對大多數回答。

不是說不公開、不評議,題主說的是小範圍公開、有效評議。

我們講句大實話,用三種不同的現有的合格的公開的對稱密碼學演算法,組成一個複合的對稱加解密系統,那麼,如果這三種對稱密碼學都存在一些破綻(假如有),那麼也很難實際攻擊。

這是最簡單的安全增強機制。

更別提你可以加padding隨機數之類的東西,甚至先gzip壓縮一下,然後打亂一下。

這種設計方法,幾乎不可能是不安全的。

=============================================================

但是,完全沒有必要公開「我就是用了三個密碼系統組合」這一點。

國產大飛機的技術,技術自然要保護,我們要不要公開出來,讓大家評議?

國防重大設備的機制,我們難道也要公開拿出來評議嗎?

課本講的道理,是密碼學界督促大家,沒有水平,不要自己造東西,要相信久經考驗的密碼學演算法,是經過差分、原像等複雜的攻擊方法進行測試的。民用系統不要自己搞一套東西,然後設計者壓根就不是密碼學專家,就一個民科,那肯定出問題。

現在要是有人直接用AES,然後分組加密演算法亂來,不搭配完整性校驗,那也是白搭。好的分組加密演算法,不搭配好的分組模式,本身就存在一大類攻擊。

工程技術也是應用密碼學的一個部分。

============================================================

AES演算法使用了很多精巧的結構,非常適合學習。軍方也可以拿這個來改。

想起來很久以前還有一個故事,說當時AES拿的票太多了,有人懷疑是美國國安部門插手的。這種事,人言可畏。信息安全,本來就有一個獨立自主的原則。

我個人覺得,如果軍方實現自己的密碼學演算法的時候,能找一個好一點的框架開始做,在自己有一些密碼學基礎的情況下(而不是隨隨便便找會用密碼學演算法的程序員),也不會改出問題來的。

別把密碼學當作多神秘的東西。有一大堆混淆和打亂,你加多加少,安全性是降不下去的。你願意浪費一點性能,可以做的事兒太多了。

=============================================================

民用密碼學系統一直都重視效率,SHA3標準開始的時候,MD6就被刷下來了,因為它為了解決差分攻擊,但是性能一直降不下來。Rivest甚至提出了很多優化的方法,甚至直接出面說:我覺得要求SHA3候選演算法性能和SHA2相比xxxx是不合理的。

難道你在軍事應用的時候,不應該去看看MD6那個設計策略嗎?

安全和性能是折中的。你AES、RC6輪流轉幾圈,或者什麼Feistel架構用SHA3、MD6跑兩三圈,你這密碼就特別難破。即使裡面有一兩樣出了問題,也不會導致木桶效應。只是性能差一點了。

應用密碼學演算法要講場景的,做網路安全也是要講場景的。我覺得我這個場景對安全要求很高,我就像預防未知風險,我就是多個演算法組合一起來推,我性能開銷是大了一點,我的可用性和便利性雖然下降,但是我的安全性絕對下不去那麼多。

再說了,現在的對稱加密演算法,分組長度就已經太小了。現在公鑰密碼學可以載的分組長度不小了,完全可以設計分組長度更大的演算法。你分組長度大,不管如何中間相遇攻擊就變困難了啊,這樣你用密碼系統組合就更有效了啊。

=============================================================

前面巍然說的是公鑰密碼學。其實如果有朝一日,shor演算法實現了(雖然作為支持曹珍富老師的派別認為這件事不會發生),那我們的公鑰密碼學,許多公鑰密碼學上的演算法,也不安全。

我個人上述內容不考慮公鑰密碼學。軍事上,我覺得也不應該用那麼多公鑰密碼學。

對稱密碼學讓我覺得可靠一些。公鑰密碼學和對稱密碼學,很大程度上壓根是兩套理論。

=============================================================

還記得美國有一個suite A,裡面的演算法還是保密的嗎?

為什麼我非要公開呢?


如果樓主真是想多獲得點反方意見而不是只是為了辯論,我這裡加一句。但是我絕對不會再辯論下去了。

現在的密碼學已經是非常分工仔細的工作了,任何一個人都只能在某一個領域牛。而且任意找幾個頂級大學的博士,也會比某些幾十年的專家在某一方面牛那麼一點點。

公開評議的原因也就在於此。

密碼學目前都是基於限門的,限門的成立大部分並沒有數學上嚴謹的證明。所以不停的會有研究結果發現限門在某些小場景下用某種特殊的攻擊方法能夠成功。所以rsa有很多坑,並不是可以隨便用。而這些坑的發現不是每個頂級專家有功夫去做的。專家再牛也需要一定的工作量去做事情。「人數*牛b程度*工作時間」才能得到有效的結果。工作時間包括現在的和歷史的。牛b程度達不到百萬倍吧,人數x歷史時間能


不是【一定】要把演算法公開,而是密碼的安全性不能建立在假定別人不知道你的演算法的基礎上,這樣的根基太不牢靠。

即使別人完全知道你的演算法的各種細節,依然破解不了,這樣的安全性才是更可靠的。

A) 你的演算法本身很可靠,為什麼要浪費大量的成本與精力去保密演算法本身?(除非該演算法本身具有保密價值,但那和本問題無關)

B)你知道演算法本身不夠可靠,把希望寄托在演算法本身的保密上。這太不安全了。相當於你只有一個密碼,絕對不能改,還到處使用。一旦泄露,徹底完蛋死透透。

C)你不知道你的演算法本身是不是可靠,那就惴惴不安中熬吧。

為什麼選擇公開?就是為了排除C,越早拋棄有問題的演算法,危害越小。


這個問題好弱智。


有限專家評議是更安全,但是只有少數幾個政府機構能夠組織出一個有效的專家群,才能有效的保障安全。
公開的好處是整體成本低,適用於民用行業;在軍事、政治等政府核心領域使用的加密演算法有哪國公開了?


你得保證專家在有限和時間和知識背景下能夠合理的評估安全性才能用這樣的演算法,當然也有沒有向世界公開的加密演算法,我國商用密碼SM系列就是這樣的。


推薦閱讀:

iphone7被搶,今天看到短暫開機的定位還在本地,晚上收到Id釣魚簡訊,有何辦法可以把釣魚網站黑掉?
黑客的基本技術是什麼?
斯諾登通過遠程視頻在 TED 上做演講的同時是如何隱匿自己的?
閉關式的學習需要注意什麼?
第三方或者蘋果真的不能看到你的 iMessage 內容嗎?

TAG:網路安全 | 黑客Hacker | 密碼學 | 密碼安全 |