Featured image of post 柯克霍夫原則

柯克霍夫原則

“柯克霍夫原則”


你好!

今天我想談談一個有點有趣、實際上非常重要的東西,叫做「柯克霍夫原則」。

啊,等等。
有些人可能會想:「我從來沒有聽過『柯克霍夫原則』,聽起來好像很難懂……」。請放心,這篇文章正是寫給有這種想法的你讀的。


什麼是「安全的密碼」?

例如,假設有人說:「這個保險箱,只有知道秘密開啟方法的人才能打開。」

乍看之下,這似乎非常安全,對吧?
但是,仔細想想,這不是有點令人不安嗎?

像是「如果那個秘密被發現了,不就完蛋了?」

事實上,這正是柯克霍夫原則出現的契機。


到底什麼是「柯克霍夫原則」?

簡單來說,這是一種概念:

「密碼應該在機制被公開的情況下依然安全。」

更進一步說,「安全性應該只依賴『秘密的鑰匙』,密碼的方法本身公開也沒關係!」

反過來說,「只把密碼的演算法(機制)保密的狀態,會被認為是可靠性很低的。」


「機制保密就很安全」可能有點危險

這是常見的想法:

「這個應用程式的內部沒有給任何人看過,所以安全性沒問題」

我了解這種感覺。
但這就等於在說:「因為沒有人看,所以不會發現缺點,沒問題的。」

實際上,這種「沒有人看」的狀態本身可能就會成為一種風險。


但是,為什麼這個原則這麼重要?

因為,如果有人取得了這個機制,並且可以輕易解碼,那這個密碼就沒用了。

打個比方,就像是一扇門的鎖機制非常複雜,但實際上卻可以用百元商店打的備用鑰匙打開。

重要的不是「鑰匙是秘密的所以沒問題」,而是「即使公開所有的機制,沒有正確的鑰匙也打不開」。


「但是,這樣不會有點可怕嗎?」的心情

很多人在這裡會感到不安:

「把所有的機制都公開,不會有點可怕嗎?」

我懂。
因為你會想:「如果我把內部全部公開,不會被模仿或惡意利用嗎?」

但這正是柯克霍夫原則的核心。
「即使讓人看到內部也不會崩潰的強度」才是真正的安全。


話雖如此,一開始確實需要一點勇氣

站在開發者的角度來看,似乎「公開機制 = 暴露弱點」,這當然會讓人感到緊張。

但是請想想看。

能夠大方展示機制並說出「任何人都可以來驗證」的東西,結果反而更令人信賴。

這跟人際關係很像。

「在展現真實自我後還能好好相處的人」,終究是最讓人安心的。


總而言之

柯克霍夫原則聽起來可能有點理論化,但本質上非常簡單。

其實就是 「讓我們建立一個不管給誰看都不會崩壞的機制」 而已。

與其保持表面的秘密,不如有良好的設計。
與其寫出不想讓任何人看的程式碼,不如寫出展示給別人看也不會覺得丟臉的程式碼。

或許,未來的時代會越來越需要這種「強度」。


非常感謝您的閱讀!

雖然安全性的話題有點困難,但也有些部分與「人際關係」或「日常的安心感」相連呢。
不用感到有壓力,只要一點一點地去了解,相信一定會有好事的。


Auguste Kerckhoffs

comments powered by Disqus
使用 Hugo 建立
主題 StackJimmy 設計