about 2 years ago

密碼學筆記

上篇連結

數字簽證

延續上一篇的消息認證,消息認證能做到防止竄改,但是無法提供第三方認證與防止否認,最大原因是通信兩者使用對稱密鑰,就好比是兩人說悄悄話沒有簽字畫押,其他人無從得知真偽。
數字簽證透過否像使用公鑰加密解決這個問題,因為公私鑰配對是獨一無二的,能用私鑰簽證者必然只有一人。

Sign = msg^D mod N
Verify = Sign^E mod N

數字簽證會遭遇的攻擊有

  1. 中間人攻擊:跟公鑰加密一樣
  2. 釣魚攻擊:假設M獲得某個要送給B的密文(密文=M^E mod N),接著騙B說 幫忙將此訊息簽證,Sign = msg^D mod N => Sign = M^E^D mode N => Sign = M,瞬間變成幫忙解密了!所以千萬不可以隨便幫不明訊息簽名
證書

使用公鑰最怕中間人攻擊,因為無從得知這把公鑰到底屬於誰,有人提出了 PKI(公鑰基礎設施)的規範,裡頭包含了(用戶、CA授權單位、以及放公鑰的倉儲),透過向CA申請,即可將自己的公鑰放入倉儲,接著有人訪問時就將證書給對方,對方拿去CA換公鑰,杜絕中間人的攻擊。
而CA的公鑰則直接放入電腦中或是公布于網路中,不必擔心遭到調包,但是這一點也曾經遭受攻擊,Lenovo電腦廠商曾內置不當軟體,會偷偷掉包證書,所以安全漏洞無處不有啊。
另外證書是可以作廢的,作廢需要向CA提出,而CA會產生CRL(證書作廢清單),但如果在作廢的當下仍然有人使用證書,此時間差內就會有被破解的危機,針對作廢時間差的攻擊十分難以防禦,就跟掉信用卡一樣,所以要勤快些更新CRL

密鑰管理

Diffie-Hellman密鑰交換:這個密鑰交換可以在雙方從毫不知情下產生對稱密鑰


其中G、P、A、B都是公開的,而a、b則必須要保密
PBE:基於口令的密碼,當我們使用這麼多加密演算後,產生了龐大的密鑰,如何安全的置放是個很大的問題,書中提出了使用一把密鑰保護其他眾多密鑰,而這把密鑰稱為KEK(Key Encrypt Key密鑰加密密鑰)
KEK的生成:為了避免字典攻擊需要產生隨機亂數-鹽(Salt),同時加上使用者自訂的口令(Password)經過單向散列產生KEK。
保存的時候要將鹽和加密過的密鑰放在一同保存,之後使用者再輸入口令即可還原密鑰。

隨機性

隨機,產生對稱密鑰要隨機數、產生公私鑰也要隨機數、產生初始值也要隨機數,隨機可以說是密碼學的基礎,而使用強度不夠的隨機數也代表著安全會有漏洞
隨機數依照性質又可以分成

  1. 隨機性:不存在統計偏差
  2. 不可預測性:不能從過往數列推出下一個數,實踐方法透過其他密碼技術,如單向散列和密碼機密性
  3. 不可重現性:除非將數列保存下來,否則不可能重現數列 性質由上往下越加隨機,而單純依靠軟體只能實踐前兩項(又稱偽隨機數),因為軟體必然執行在有限狀態的計算機上,所以不管如何都會數列都會有週期
    而符合不可重現性的真隨機數,這就需要外在無法預測的物理現象,例如 CPU熱噪音、使用者鍵盤輸入等 #####TLS/HTTPS 查看其他篇
← 密碼學筆記上 密碼學筆記-使用Go實踐Enigma軟體版 →
 
comments powered by Disqus