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