iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 3
0
Security

資料安全與簡單加密演算法見面會 系列 第 3

[Day03] 資料儲存安全(SQL雜湊加密函數)

資料是應用系統中最重要的有價值資產,也是系統的大本營,戍衛大本營更是近衛隊重要的資訊安全任務,這一天我們先從京城開始巡查,首先我們需要對於資料庫中某些敏感性欄位作保護。

在PCI DSS的要求3:保護持卡人資料中提到

如非必要,不要儲存持卡人相關敏感資料。若確有儲存的需求,須以加密、截斷、遮罩或雜湊等方式處理。

比方像是下表中的PAN(Primary account number),也就是信用卡或簽帳卡卡號。
http://ithelp.ithome.com.tw/upload/images/20161218/20103434HlWY2wIqV6.jpg

根據PCI DSS的標準不適合直接明碼儲存。

儲存安全保護機制就是希望資訊安全事件災害發時生時,雖然入侵者繞過安全控制獲得某個內含敏感性資料的資料表(Table),我們也還能拿著點38手槍多拖延一點時間。
常見的作法就是將資料行,也就是欄位作雜湊(Hash)或是加密(encrypt):

  • 雜湊:竊取者沒辦法直接用肉眼判讀資料。
  • 加密:竊取者如果沒有取得正確的加密金鑰,這些資料還是具備不可讀性。

那麼怎麼在SQL資料庫中儲存加密或是雜湊後的資料?
記得以前我們會透過AP的手段,從AP將資料加密/雜湊後再送到DB存放,今天來複習SQL資料庫端的雜湊(Hash)功能。

雜湊(hash Algorithm)


先淺淺的認識一下hash function,雜湊演算法是一種從資料中建立一個唯一性指紋,而且除非有mapping table,hash後的結果通常沒辦法回推回原始資料值。

因為工作上的使用主要還是以微軟SQL Server為主,有Demo的部分會以SQL Server為主,
這邊我們假定成員已經安裝好SQL Server資料庫及管理工具SSMS了。

https://www.microsoft.com/zh-tw/server-cloud/products/sql-server-editions/sql-server-express.aspx

先查看Demo資訊庫的版本資訊:

http://ithelp.ithome.com.tw/upload/images/20161218/20103434cBGVDN0LDV.jpg

為了方便接下來的練習,
我們先新增一個資料庫SecurityDB。

CREATE DATABASE [SecurityDB] 
 CONTAINMENT = NONE 
 ON  PRIMARY  
( NAME = N'SecurityDB', FILENAME = N'F:\DATA\SecurityDB.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB ) 
 LOG ON  
( NAME = N'SecurityDB_log', FILENAME = N'F:\LOG\SecurityDB_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB ) 
GO 

建立一個持卡人資料表

USE SecurityDB 
CREATE TABLE [dbo].[cardholder]( 
[id] [int] identity(1,1) NOT NULL, 
[pan] [varbinary](max) NOT NULL, 
[name] [nvarchar](50) NOT NULL, 
[svc] [varchar](3) NOT NULL, 
[expirdate] [varchar](4) NULL, 
 CONSTRAINT [PK_cardholder] PRIMARY KEY CLUSTERED 
( 
[id] ASC 
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 

寫入雜湊資料

INSERT INTO cardholder 
VALUES(HASHBYTES('SHA2_512',N'2123456789012345'),N'亞歷山大','101','1299'), 
      (HASHBYTES('SHA2_512',N'3123456789012345'),N'凱撒','101','1299') 
GO 

實現不可讀,而且選擇SHA2還是比較高強度的雜湊演算法

SELECT * FROM cardholder 

http://ithelp.ithome.com.tw/upload/images/20161218/20103434d9rHDcbdpl.jpg

可以直接將條件雜湊後去比對

SELECT * FROM cardholder 
 WHERE PAN =  HASHBYTES('SHA2_512',N'3123456789012345') 

http://ithelp.ithome.com.tw/upload/images/20161218/20103434wQZaGojq8f.jpg

編碼學 vs 密碼學


在電腦科學中,資料的編碼encoding是這門學科的數學基礎,密碼學cryptology則從複雜性來創造編碼的應用。

對我們一般凡人來說,編碼也許像密碼學一樣深。
對熟悉密碼學的高手,簡單的密碼學也許像編碼一樣淺。

我們來慢慢熟悉密碼學吧!

密碼雜湊 VS 密碼加密演算法


不需要金鑰的加密技術稱為雜湊,希望從資料取出唯一的指紋。
需要金鑰的加密技術則稱為加密演算法。
雜湊演算法必須具備不可逆性,舉例來說: y = hash(x) , y不應該算回x
加密演算法則可以透過解密取出原始資料x,舉例來說 y = Encrypt(key,x) ; x = Decrypt(key,y)

  • X=明文
  • Y=密文

個資盤點:


了解要保護的標的物才能對症下藥,實施適當的措施,也許可以在工程師的資料字典(Data Dictionary)中註記是否為個資,如果設計資料表都要參考資料字典,很快就可以盤點出來;再不然,工程師的table schame的column上也可以加上一欄是否為個資。

參考:

SQL Server支援的雜湊演算法
https://msdn.microsoft.com/zh-tw/library/ms174415.aspx

PCI DSS
https://www.pcisecuritystandards.org/pci_security/


巴伐利亞警車
http://ithelp.ithome.com.tw/upload/images/20161218/20103434mIJE7ksZ1J.jpg
攝於2015-12 rothenburg,Germany


上一篇
[Day02] 支付卡產業資料安全標準(PCI DSS、PA DSS)
下一篇
[Day04] 資料儲存安全(SQL加密函數)
系列文
資料安全與簡單加密演算法見面會 30

尚未有邦友留言

立即登入留言