陳唯源



[摘要]本文探索加密技術在大數據審計中的實踐應用,設計了一種基于加密技術的非現場數據審計方法,以確保審計數據、審計程序和審計結果的安全性和完整性,不僅適用于內部審計,也適用于監管部門對外部機構的數據檢查。
[關鍵詞]大數據??? 加密技術??? 數據安全??? 非現場審計
數據審計環境下,審計人員需要調閱審計對
象的數據進行分析,但部分審計數據較為敏感,將數據復制到審計人員計算機上存在一定的信息安全風險。對此,筆者結合審計實踐,設計了一套加密流程,以非現場形式在審計對象的服務器或計算機上運行審計程序,得到審計結果。通過該流程,審計人員無需接觸全部數據,可確保審計數據的安全性;審計對象無法篡改審計程序和結果,可確保審計結果的有效性。
一、傳統數據審計方法
傳統數據審計流程中,審計人員需要將審計對象的數據復制至審計人員計算機上進行分析。典型的調閱數據審計流程如下:首先,審計對象將數據提供給審計人員,復制到審計人員的計算機上;然后,審計人員在計算機上編寫審計程序分析數據,得到審計結果。如圖1所示。
在上述流程中,審計對象提供的審計數據包括數據表等結構化數據及文本等非結構化數據;審計人員使用Excel等數據分析軟件或Python等編程語言,編寫審計程序分析數據,得到審計結果。目前,大部分審計均采用該流程,但該流程存在信息安全風險。以信息系統安全審計為例,審計人員調閱審計對象信息系統中的passwd或shadow口令文件,檢查操作系統是否有弱口令,但該文件較敏感,導出分析存在口令泄露的風險。
為確保數據安全性,避免上述數據泄露風險,一種思路是審計人員在審計對象提供的環境中編寫審計程序分析數據,審計數據不脫離審計對象環境,如圖2所示。目前人民銀行對外部機構檢查通常采取該方法,但該方法仍存在數據泄露風險,審計人員在審計對象服務器上編寫程序時仍可查看和篩選全量的審計數據。
二、基于加密技術的非現場數據審計方法
(一)非現場數據審計方法
為解決上述調閱數據審計和現場數據審計方法存在的數據安全問題,可以采用非現場數據審計方法,流程如下:首先,審計對象提交少量審計數據樣本給審計人員;其次,審計人員根據樣本數據編寫審計程序,將審計程序交給審計對象,由審計對象在其服務器或計算機上運行得到審計結果;最后,審計對象將運行結果交回審計人員。如圖3所示。
通過該方法,審計人員無需復制或查看全量數據即可進行審計,能夠確保數據的安全性。但該方法存在兩個問題:一是審計程序可能被審計對象查看或篡改。審計對象若能查看程序,可以有針對性地修改審計數據使結果合規;審計對象若能篡改程序,可以令程序直接輸出合規的結果。二是審計結果可能被審計對象篡改。
(二)基于加密技術的非現場數據審計流程
為解決上述問題,筆者設計了一套基于加密技術的非現場數據審計流程,以確保審計程序和結果不可被審計對象查看或篡改。該流程對審計程序和審計結果進行雙重加密,步驟如下:首先,審計對象提交少量審計數據樣本給審計人員;其次,審計人員根據樣本數據編寫審計程序并進行加密打包,并將加密打包的審計程序交給審計對象,由審計對象在其服務器或計算機上運行,得到加密的運行結果,并將運行結果交回審計人員;最后,審計人員使用解密程序對運行結果解密。審計結束后,審計人員可將解密程序提供給審計對象,由審計對象自行對審計結果解密,使審計對象確信取證的數據未包含全量或敏感數據。如圖4所示。
針對審計程序被查看或篡改問題,該方法對審計程序進行了加密打包;針對審計結果被篡改問題,該方法對審計結果進行了加密,確保不會被篡改。在審計結束后,審計人員還可將解密程序提供給審計對象進行解密,使審計對象確信未提取全量或敏感數據。
(三)基于加密技術的非現場數據審計示例
審計程序、程序加密打包及結果加密算法的選擇較為靈活。審計程序可以使用C++、Java、Python等編程語言進行編寫,適用于Windows、Linux等系統;加密打包可以使用對應編程語言的二進制程序打包及代碼混淆工具,使程序內容無法被查看或篡改;審計結果的加密算法可以使用DES、AES、Blowfish等加密算法。
以Windows操作系統的Python語言和AES加密算法為例。假設審計對象的審計數據文件為交易數據,如表1所示。
假設審計程序為計算全部交易金額的和(在實際審計過程中,審計程序可以完成更復雜的任務,例如根據條件篩選數據等)。針對該數據,審計人員需要編寫審計程序和解密程序。
1. 審計程序。審計程序包括審計邏輯函數和結果加密函數。在完成審計程序編寫后,使用打包工具對腳本進行加密打包。
(1)審計邏輯函數。審計邏輯函數對審計數據文件的第三列進行加和,輸出求和結果。審計邏輯函數代碼如下:
def audit(source_file): #source_file為審計數據文件名
with open(source_file, 'r') as f: #打開審計數據
s = 0 #初始化和為0
for line in f: #逐行讀取審計數據
s += int(line.split('\t')[2]) #將數據的第3列加和
return s #輸出結果
經過審計邏輯函數處理,得到交易金額的和為“300”。
(2)結果加密函數。結果加密函數中,使用Python加密庫中的AES加密算法,使用一個隨機密鑰對輸出結果進行加密。例如,輸出結果為“300”,秘鑰為“asdo129xkw9230o0”時,加密結果為“f6aff118ef8c05b5a1bd2009ff7cc536”。加密算法不僅能加密單個數據,也可加密多行文件。加密函數代碼如下:
def encrypt(result):? #result為審計結果
pc = PrpCrypt('asdo129xkw9230o0')? # 初始化密鑰
return pc.encrypt(result)? #對審計結果加密
(3)對審計程序進行加密打包。使用Pyinstaller打包工具對腳本進行加密打包。代碼如下:
pyinstaller -F program.py
打包后得到program.exe程序,將該程序交由審計對象運行后,即得到加密的審計結果。以上述結果為例,審計對象運行program.exe程序后,得到審計結果文件“f6aff118ef8c05b5a1bd2009ff7cc536”,并交回審計人員。由于審計程序經加密打包,審計對象無法查看或篡改審計程序內容。
2. 解密程序。審計人員接收到加密的審計結果后,使用解密程序及密鑰進行解密。代碼如下:
pc = PrpCrypt('asdo129xkw9230o0')? # 初始化密鑰
with open(result, 'rb') as f: e = f.read() #讀取加密的審計結果
d = pc.decrypt(e)? # 解密
通過該程序,審計人員解密上述密文,得到交易金額的和為“300”。由于加密算法的一致性,審計對象如果任意修改加密結果,解密程序將無法解密,因此可確保審計結果未被篡改。
示例的數據流程如圖5所示。通過上述流程,審計人員無需全部數據即可獲取審計結果,審計對象無法查看或篡改審計程序和結果。在審計結束后,若有必要,審計人員可將解密程序提供給審計對象,由審計對象自行對審計結果解密,使審計對象確信審計結果中未包含全量數據。
三、總結與展望
當前大數據審計趨勢下,如何確保審計數據的安全性,是內審人員需要思考的重要問題。本文設計和示例的基于加密技術的非現場數據審計方法,可確保審計數據、審計程序和審計結果的安全性和完整性。該方法適用范圍較廣,不僅適用于內部審計,也可用于監管部門對外部機構的數據檢查等領域。但該方法僅解決審計數據分析過程中的安全性問題,面對實際審計工作中的復雜任務,還需審計人員借助專業經驗和數據挖掘算法設計審計邏輯函數,挖掘隱藏在數據背后的審計線索,促進大數據在審計中得到更好應用。
(作者單位:中國人民銀行福州中心支行,郵政編碼:350003,電子郵箱:cwyalpha@foxmail.com)
主要參考文獻
任華新.數據加密算法的綜述[J].電子世界, 2016(18):95-95