資安三元素
概念: 不想被知道的東西,不會被知道,確保資料不被未經許可的人存取或修改
常用的工具: 加密,就像是把東西鎖在保險箱裡
加密的安全程度 決定因素
加密演算法 (保險箱本身的設計)
密碼 (鑰匙和鎖的複雜程度)
好的加密方法: 好的加密演算法 + 足夠安全的密碼
概念: 確保想保護的資訊可以正確且完整的被處理及保存
以拼圖為舉例
需要注意的點: 有沒有不小心把其中幾片拼圖弄不見、有沒有別的拼圖混入了我們的拼圖中
常用的工具: 數位簽章
就像現實生活中簽名的動作
由雜湊函數及公開金鑰加密法組成
概念: 確保公司 / 軟體可以正常運作
阻斷式攻擊 Denial of Service (DoS) : 駭客刻意讓網站癱瘓不能正常運作
分散式阻斷攻擊 Distributed Denial of Service (DDoS) :更進階的阻斷式攻擊
解決辦法
常見的天然災害
火災、水災、地震、颱風,直接對設備造成物理性傷害
為什麼要討論到天然災害?
現在的生活已經離不開電腦跟網路,確保網路跟電腦能維持基本的運作已經變成必須
應對方式:企業永續計畫 Business Continuity Plan (制定詳細的防範措施)
資安工程師
資安研究員
資安架構師從系統架構的方面上來確保安全性
資安分析師
資安長
網路警察
資安鑑識工程師
有些地方會翻譯為哈希函數,雜湊函數是一種演算法類型,當我們輸入一個值給雜湊函數時,他會回傳給我們一個雜湊值(hash, hash value),一個理想的雜湊函數會有以下特性:
從雜湊函數取得的雜湊值不會因輸入值的長短而有所改變。不管輸入的是一個字、一句話,或是五百字心得,當輸入不同的值給雜湊函數,從函數取得的雜湊值長度應該是固定的。雜湊值的長度則是由雜湊函數所決定,不同的雜湊函數可能會有不同的雜湊值長度。
在講解單向函式以前我先稍微解釋雙向函式。以一個簡單的算式 (A + 2) x 5 = B 來說,當我們輸入 A 值時會得到 B,且我們可以由 B 來回推出 A 是什麼,這就是雙向函式。單向函式則相反,當我們輸入 A 值時可以從函式得到 B,但我們無法從 B 回推出 A。 雜湊函數就是屬於一種單向函式,我們可以從輸入值給雜湊函數來得到雜湊值,但我們無法從雜湊值回推出輸入的值為何。
雜湊函數上指的碰撞就是當有兩個不同的值經過雜湊函數後會得到相同的雜湊值。碰撞在雜湊函數上是不可避免的,因為有雜湊值長度固定的特性,當輸入的值有無限種可能性,但輸出的值長度卻有限,就一定會發生碰撞。一個好的雜湊函數不是應該避免碰撞,而是要有碰撞抵抗性,什麼是碰撞抵抗性呢? 就是雖然有碰撞的發生,但我們無法用計算或推理的方式去找出哪些輸入值會造成碰撞。 這個概念就像理論上是有可能有兩個人有相同的指紋的。但我們無法光從指紋本身就推斷出是否有兩個不同的人的指紋都是長這樣,或是找出哪兩個人會有一樣的指紋。我們只能在遇到兩個人有一樣的指紋時知道,原來這兩個人有相同的指紋。
上圖為雜湊函數的範例,從圖中可以看出輸入的值不同,產出的雜湊值就會不同,且即使一句話中的只有一個字母不同,也會讓產出的雜湊值有很大的改變。(Source: Wikipedia - Cryptographic Hash Function)
因為有以上的那些特性,雜湊函數在資訊安全以及其他的領域上變得十分重要。計算雜湊值這個動作就很像在採集指紋及證據,可以用來證明資料是否有被竄改或是更動過,也可以用來驗證資料傳輸的過程中是否有遺漏。
數位簽章 中就是利用雜湊函數來確認資料有沒有被竄改,會在簽章的過程中產生資料的雜湊值,並在事後需要驗證資料時再次計算雜湊值,並比對兩個雜湊值是否相符。
區塊鏈 中的不可篡改特性也是利用到雜湊函數來實現,當有新的資料被加到區塊鏈的鏈上時,會需要留一個紀錄以便未來時驗證資料的正確性。當然他們可以選擇上傳資料或是檔案本身,但如果我們需要儲存在區塊鏈上的資料是一個影片檔或大型圖檔時,就換占用許多不必要的空間,因此區塊鏈的做法是一律儲存那個資料或是檔案的雜湊值,如此一來不僅能作為一個資料驗證的憑據,也可以確保每筆資料所需要的空間都是一樣的。
雜湊表 雜湊表則是雜湊函數的另一個應用。他是利用計算資料的雜湊值,並將雜湊值作為那筆資料儲存位置的索引,未來如果需要尋找這筆資料時只要計算它的雜湊值就可以快速找出他的儲存位置。
這邊有個可以線上計算雜湊值的小工具 https://emn178.github.io/online-tools/md4.html ,網頁上右邊 Hash 那列就是一些常見的雜湊函數,大家可以上去玩玩看,看你能不能找到有相同雜湊值的兩個輸入值。