K書筆記本-Cryptography(09)

法律問題…
上篇提到密碼學的應用會有法律上的問題,見鬼了,用應用密碼會有什麼問題呀,其實密碼學的應用是為了隱藏不想讓別人知道的秘密,
若今天黑道份子在傳遞一些交易訊息時,利用了密碼系統將這段訊息重重的加密,並且用的是較高階的密碼系統,
那麼…情治單位真的拿他們沒辦法了,因此在密碼學法律問題常就有三個議題類型:輸出控制、輸入控制及國內使用控制…

法律問題…
上篇提到密碼學的應用會有法律上的問題,見鬼了,用應用密碼會有什麼問題呀,其實密碼學的應用是為了隱藏不想讓別人知道的秘密
若今天黑道份子在傳遞一些交易訊息時,利用了密碼系統將這段訊息重重的加密,並且用的是較高階的密碼系統
那麼…情治單位真的拿他們沒辦法了,因此在密碼學法律問題常就有三個議題類型:輸出控制、輸入控制及國內使用控制。
輸出控制是希望將國內較嚴僅、用於情治使用的密碼系統或密碼系統產品流出,以避免被他國的情治單位取得而加以破密分析。
輸入控制則是降低由國外輸入較高階的密碼系統,以避免滲透的情治人員利用這些密碼系統穿透了國安系統。
國內使用控制較為廣義,泛指所有使用國內密碼系統的人應該要加以控制。

密碼系統的應用上,確實帶給我們很好的機密的資訊隱藏,本義是很好的東西,但是就怕利用的人心懷不軌,因此在法律上的議題
除了國際間的相互合作外,很難有其它更好的方法來抵制密碼系統應用於壞的用途,其中國際間現在共有的一些規範
也有針對軍方使用的一些合約協定,像Wassenaar Arrangement(瓦聖納協定)主要是針對一些較不安全的國家,將較敏感的高科技技術輸入
例如像是中國、北韓、伊拉克等等的條文,現在簽署的國家已超過四十個。
還有像是歐洲防制網際網路犯罪委員會(Council of Europe Convention on Cybercrime),雖然名為歐洲,但是會議的觀查員都是來自於其它國家
當然,歐盟本身針對他們所使用的密碼系統,也加以聯合統一管理,針對破密分析工具則不會輸出給其它國家
法律上的本質是以限制,原因是被一旦遭到洩漏,可能造成的傷害會超過於國家經濟的收入,但是於學派立場,則是希望開放密碼系統的輸出入
如此一來,各國或是其它學術機關就可以針對其它密碼系統的強項,來補足自已的密碼系統不足的地方,這個是很兩極的議題
至今仍然是被置於天平的兩端之上。光是一個密碼系統,不管是加密還是破密分析,都一再的強調對經濟、國安上的衝擊
若是貿然的進行,當然會造成相當大的傷害,因此對於此部份,也只能交給時間來處理了。

破密分析
破密分析是研究密碼系統或是演算法強度的一種挑戰,其中,到底那些面向要考慮的呢?
Key Space:到底有多少的支key可以被拿來應用。
key size:可用的key的長度為多少,雖然不是愈長就愈強,但是在破密的分析中,差1bit就天南地北了。
演算法本身:開發一個密碼演算法,是必須達到一定的強度,預防破密分析快速的找到演算的規範。
正確完成:太多的問題是與密碼完成時沒有選擇對的架構就產出這個產品,其中包含key management, Social engineering,亂數產生的掌握
不夠的配對組合,很容易就被找到問題的所在。
當然,在破密分析上面會針對一些密碼系統的幾個方向來找問題,也是密碼系統的幾個常見的弱點,其實與上面所提到的內容差異不大…
不好的key management:可使用的Key太少,不夠隨機,或者是key的加密與資料的加密是同一把key。
Malleability(延展性):一個密碼系統的若在演算明文產生為密文的過程中而附加上次的資訊可能讓明文與密文產生某種連結的關係,
而容易使Chosen-ciphertext attack成功的破密。
不好的亂數產生及過度的發散或造成混亂,這些都有可能成為破密分析中得分的那一球,破密分析不一定是要做某種數或是值的取出
更深層的意義是告訴我們應該使用更安全的密碼系統,一個封閉的演算法並不一定是安全的,接受大眾公開的驗證並且修改到可接受的範圍
這樣的心態才能正確的使密碼系統更加安全,例如選用標準的解決方法(FIPS140、Common criteria evaluation)、
高工作因素的(例如:破密的過程與取出的內容效益與時間比不成正比的),再來就是上面所提到的,選擇接受公開驗證的密碼演算法。

那麼到底破密分析有那一些目標呢?其實,有人認為,破密是一門科學藝術,因為它所投入的往往是一場耗費多時只有一點點進度的比賽
但一但找到關鍵點,則會找出讓人覺的不可思議的問題,基本上破密分析共有:
Attacking the Key, Algorithm, Implementation, Data (ciphertext or plaintext), People(Social Engineering),
一位很有名的駭客說的:往往Social engineering是最有效的破密方法,我直接取得key,也直接取得密碼演算系統,我的目的只是它傳遞的訊息
當然,破密的技術又有那一些呢?
Brute-force attack:大家應該不默生吧,這個叫做暴力破解,但暴力破解可不是猜密碼給系統去演算對或不對喲…,
  幾乎任何加密系統沒有暴力破解解不開的,根據摩爾定律(每隔18個月,處理器的速度加倍提升),但是暴力破解還是有條件的
它必須先取得密文,接下來就是時間與密碼系統的竸賽了。

破密攻擊
常見的攻擊就以明文(Plaintext)與密文(Ciphertext)來區分,當然各別的破密攻擊的作用和需求就完全不同了
在明文的攻擊方面(主要是為了取出key或是演算法的內容)
known-Plaintext attack(已知明文攻擊):這個並不是只有取得明文喲,是連密文都知道的,透過這個組合去了解演算法的內容和key。
Chosen Plaintext attacks(選擇明文攻擊):是指一次丟好幾組的明文到演算法中,去觀查其密文的變化進而找到key。
Adaptive chosen plaintext attacks(適合的選擇明文攻擊):以選擇某一組明文並且修改去觀查密文的變化,也是用來找到以密文反推明文方法。

在密文的攻擊方面(主要是為了知道其明文的內容)
Ciphertext-only attack(僅有密文攻擊):利一堆密文希望可以還原出明文來,此類型的攻擊現代密碼學幾乎是不可能成功了。
Chose-Ciphertext attack(選擇密文攻擊):已經知道密文轉回明文的方法,以自選的一組密文來推出明文是什麼。
Adaptive Chosen Ciphertext attack(適合的選擇密文攻擊)與Adaptive chosen plaintext attacks相反,精選的密文來測試演算法。

在上述的破密攻擊中,只有know plaintext attack是已取得一組密文和密文的組合,其它都是只有取得密文或明文
其它的還有幾種基礎的攻擊,像是:
Meet-in-the-middle attack(中途攻擊):是成攻的破解DDES的分析法,藉以取明文與密文之間的變化去取得演算法的內容,屬於know plaintext attack。
silde attack:以觀查key schedules的重覆、具體的使用去推演出下一個key。
Main-in-the Middle attack(中間人攻擊):又稱為雙面人攻擊,即是attacker對Jason偽冒Silvia,對Silvia偽冒Jason,任何傳遞的資訊都被attacker看光了。
Side Channel attacks:這個就難解釋了,是一種透過觀查其周邊的洩露出來的訊息做攻擊,例如演算RSA時用掉的電量、時間、時頻…等等周邊的
   資源的消耗來試圖推算出金鑰,但是…這個方法不需要使用任何的密碼系統露洞,就可以進行分析,雖然有學者稱為欺騙
   但破密分析最終就是要找到KEY。

另外,針對不同的Ciphers,不論是以Stream或是block的特性不同,也有不同的應對攻擊:
Stream(串流):Frequency(頻率)分析及Statistical(統計)攻擊,如果IV, keystream不夠random,則容易受到這兩種攻擊而解出key.
Block(區段):linear(線性)破密分析、Differential(差分)破密分析, linear-Differential(線性差分), Algebraic(代數)攻擊、frequency(頻率)攻擊。
以上的分析或是攻擊法都在前面的章節中有說明,在此就不再特別說明了。

而hash functions也有兩個基礎理論的攻擊法,Dictonary(字典) attacks以及Birthday(生日) attacks,這兩種攻擊都有個別的特性:
Dictionary attacks:是以找到特定文字的hash組合,一般是用來猜password的功能,另外最近常見的是Rainbow table
需預先去產生所需的text-digest pairs資料庫,也是屬於Dictionary的一種。
Birthday attacks:是基於一種一個班級的學生有23人生日是同一天的機率高到50%,若人數達到60個人,則機率更達到99%,同理,在有限的長度之下
要產生一組hash有可能重覆的機率就大幅的提升。

以上的攻擊都是屬於科技端、數學理論的攻擊,當然也會有非科技型態的攻擊,其中最好用的就是Social Engineering
最好的方法就是針對未有資安概念的實員進行攻擊,尤其是在整個開發的過程隨即攻擊相關人員,預先取得密碼演算方法或是key。
另外…在國外的影集常常出現的,偷竊是建構在實體安全之上的,雖然資料被經過加密,但若我連設備和加密工具一起偷竊走,那麼即使是再強的
密碼演算系統,恐怕…也沒有太大的用處了…

Steganography(隱匿法)
這是一種將資訊隱匿起來的一種密碼方法,一般是使用在於儲存圖片的資訊,以每一個區段中的最後一個bit裡面,因此可以隱藏一些資訊,
也可以說是一種cover channel,在這種方法之上,就容量上來看似乎沒有差別,在肉眼的看來,也沒有啥差異,但是…透過MD5 Hash value中
可發現兩張圖片就很大的差異…實作的部份可以透過像s-tools來達成。

接下來像是數位浮水印(digital watermarking)、數位權利管理(Digital Right Management),數位浮水印是將一個數位的資訊、版權簽入
屬於一種隱匿法,一般又分為可見和不可見的分類,可見的是像一般的浮水印一樣,崁在檔案中,而不可見則是將檔案做小符度修改
使用者並不會有太大的查覺,但是透過修改時則無法被存入,這除非有所有人的授權,否則是無法將浮水印移除抹滅的。
DRM則是則是將數位浮水印的技術延伸去用來保護數位媒體,它結合了硬體及軟體的框架,當然DRM也是一種隱匿法
如果一個具有DRM的檔案移轉到另一台電腦上去使用,因該台電腦並沒有取得DRM的授權,則無法使用這個檔案,也會被禁止使用。

密碼學這個領域雖然組合了密碼系統及演算法,但是更重要的是著重在訊息完整訊控縐,而數位簽章及憑證的應用也加強了訊息的安全強度
最後,跟大家討論破密分析及密碼的應用,尤其是一些資訊隱匿的方法,都是密碼的實際應用,希望這章節可以給大家帶來一些實際應用的想法。


Anything keeps Availability.
Anywhere keeps Integrity.
Anytime keeps Confidentiality.
keep A.I.C. = Information Security