狠狠撸

狠狠撸Share a Scribd company logo
107-2 資安暨DSP期末專案報告
Image-Audio-Player程式原理介紹說明 Version: 2.7.1
基於古典加密法中的替換密碼在音訊轉置到
bmp影像之欺騙偽造設計與實作
資工三 S10559020 連永立
總綱 .
1.導論 .............................................................................................
2.BMP影像檔格式...........................................................................
3.加密..............................................................................................
4.解密..............................................................................................
5.未來展望與推測............................................................................
6.介紹Image-Audio-Player..............................................................
7.參考資料.......................................................................................
導論
INTRODUCTION
~4~
為什麼我要做這個專案並結合資安
?當時,要準備因為沒有什麼靈感,而思考了一段時間......。
?而在隔壁的資安課程,剛好講到加密技術理論。那麼,不如嘗試
看看把音訊資料來做加密吧!
?在此,加密理論可以放在資安上,而音訊採樣技術與實做部份,
則可放在DSP上,融合兩者,以嘗試看看應該沒有什麼人做過的
東西。
~5~
古典加密法 - 替換密法技術
?在古羅馬時期,就已經有凱薩加密法,來對訊息做加密,在此則
針對於此傳統替換密碼之加密技術進行延伸。
?讓在此使用替換加密技術來做音訊資料的加密。
?在此,我們都講:f(x) = Key(k) + x 對資料線性位移的加密方式。
~6~
提問
?大家覺得這張圖是什麼呢?
~7~
提問
?大家覺得這張圖是什麼呢?
?這是一張受到加密的音檔
? 運將檔案偽裝成另一個檔案型式
? 讓觀察者在第一時間無法判斷此
資料的意義。
? 在此,是對於音訊檔Buffer上的
資料進行加密與轉存化。
~8~
實做程式
?目前檔案以放到GitHub上開源:
? https://github.com/Lian0123/Image-Audio-Player
?授權協定:
? MIT License
?使用語言:
? JavaScript含Node.js
?使用框架:
? Electron.js、vue.js
BMP影像檔格式
THE TYPE OF BMP FILE
~10~
bmp影像結構說明
一張黑色的
Bmp影像
使用GHex取得Bmp描述:
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 .......
首先我們先用GHex軟體取得Bmp檔
的二進檔描述。
~11~
bmp影像結構說明
?接著來分析Bmp檔的header描述:
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~12~
bmp影像結構說明
?前2Byte為Bmp檔的種類
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~13~
bmp影像結構說明
?4Byte為Bmp影像檔案大小
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~14~
bmp影像結構說明
?4Byte為保留用
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~15~
bmp影像結構說明
?4Byte起始偏移量
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~16~
bmp影像結構說明
?4Byte Bmp Header
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~17~
bmp影像結構說明
?4Byte影像長
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~18~
bmp影像結構說明
?4Byte影像寬
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~19~
bmp影像結構說明
?2Byte圖層數
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~20~
bmp影像結構說明
?2Byte色彩度
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~21~
bmp影像結構說明
?4Byte壓縮方式
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~22~
bmp影像結構說明
?4Byte點陣圖資料大小
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~23~
bmp影像結構說明
?4Byte水平解析度
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~24~
bmp影像結構說明
?4Byte垂直解析度
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~25~
bmp影像結構說明
?4Byte擴充?
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~26~
bmp影像結構說明
?4Byte擴充?
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~27~
bmp影像結構說明
?實際上會要改到的:
42 4D 36 E1 00 00 00 00 00 00 36 00 00 00 28 00
00 00 A0 00 00 00 78 00 00 00 01 00 20 00 00 00
00 00 00 E1 00 00 C4 0E 00 00 C4 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
也就是只要改影像長寬與影像內容
~28~
bmp影像結構說明
GR B R BG R G
BR
GR B A GR B A
G A BR G A BR G ABR G A
8bit一相素 一色彩點 色盤
8bit一相素 一灰階點 數值
16bit一相素 一色彩點 數值
24bit一相素 一色彩點 數值
32bit一相素 一色彩點 數值
RA
~29~
在此發現一個滿有趣的現象
?像是在Krita軟體中
? 即便一開始設定為灰階8bit一相素點,實際匯出確是24bit一像素的全彩。
? 這部份個人的猜測為可能影像輸出不支援,但實支援8bit灰階影像輸入
?但在Gimp中
? 設定灰階8bit一相素點,輸出即灰階8bit一相素點,雖然會產生額外描述。
? 這部份則是讓8bit一像素點彩色與灰階描述能分別描述。
~30~
bmp影像結構說明
一張Bmp影像
值得注意的是:
我們的影像是由左下角開始編碼的
由此開始編碼
~31~
bmp影像結構說明
一張Bmp
影像
假設這是高彩影像,我們繪製的色彩資
訊,會由左下依據RGBA順序排成2進位
檔。
GR B A GR B A GR B A GR B A
0000 00 00 0000 00 00 0000 00 00 0000 00 00
加密
ENCRYPTION
~33~
偽造二進檔格式寫檔問題
?原本預計用node.js寫入 'x86'+'x08'+'x00'+'x00'
?但卻輸出: 'xC2'+'x86'+'xC2'+'x08'+'x00'+'x00'
?花了數小時才確認是JS FS WriteFile預設存UTF8編碼雷到,編碼
改成ascii就沒事了
~34~
音訊轉換為影像之混淆形式的加密算法
?Step01:建立bmp檔的header(建議全彩)
?Step02:將加密型別的hash值存成二進位形式
?Step03:讀取音訊檔案的說明主描述存成二進位形式
?Step04:取得音訊檔案的各取樣點值擷取並正規化到[0,255]
?Step05:將說明主描述與正規化音訊點用函數加密
?Step06:將加密後的資訊依照R/G/B/A 排列順序寫入Bmp檔
~35~
音訊轉換為影像之混淆形式的解密算法
?Step01:取得檔案前面的hash資料
?Step02:解析hash編碼編號是否對應解碼編號
? 當hash值未被對應,中止解碼
?Step03:解密讀取音訊描述資料,輸入至對應位置
? 當音訊描述缺失,中止解碼
?Step04:讀取bmp檔的R/G/B/A資料,並用反函數解密
?Step05:將解密音訊轉回[-1,1]的值域,並寫回到音軌上
~36~
實做重點
?該音訊處理系統的需滿足簡單的線性加解密特性
x[n]
EnCode
Decode
y[n]
System Will Let Relaction Be one-to-one
~37~
音訊點轉二進檔
?在此是針對於音訊檔案的Buffer上,取出該取樣點的值去做處理。
?由於任意音訊點內容∈[-1~1]之間,但實際上要我們只有一需將
此音訊點訊息存到1Byte空間上,為此需對其音訊做正規劃:
255 * ( Channel( i ).BufferGet[ i ] + 1 ) / 2
?而在此加密設計主要則是以下方式設計:
( 255 * ( Channel( i ).BufferGet[ i ] + 1 ) / 2 + g(k) ) MOD 255
~38~
加密方式 - 位移加密法
202220 144 166 54178 102 130
102120 44 66 25478 2 30
f(x) = floor((k+255*(x+1)/2)/255)
when k =100
~39~
加密方式 - 位移加密法
加密前的節點資料
0~255
加密後的節點資料
0~???
正規化的節點資料
0~255
~40~
加密方式 - 弦波加密法
cos(x) 訊號
sin(x) 訊號
~41~
加密方式 - 弦波加密法
?在此運用了sin(x)與cos(x)的週期函數特性:
? 因為訊號週期化,即可讓函數依據一定的週期進行加密。
加密前的節點資料 加密後的節點資料
row1:sin(1)
row2:sin(2)
row3:sin(3)
row4:sin(4)
row5:sin(5)
row6:sin(6)
row7:sin(7)
row8:sin(9)
... ...
~42~
加密方式 - 交錯級數加密法
使用交錯級數進行加密
但有部份無法進行加密
改良版:乘上常數倍
以保證內容會進行加密
~43~
加密方式 - 亂數加密法
一張Bmp
影像
改用在RGB色段使用亂數產生,只針對於
alpha channel去做儲存音訊資料。
優勢:有效隱藏資訊
缺點:檔案更大
GR B A GR B A GR B A GR B A
亂數亂數 亂數 00 亂數亂數 亂數 00 亂數亂數 亂數 00 亂數亂數 亂數 00
~44~
在此遇到一個有趣的問題
?fs.writeFile(...)無法釋放記憶體問題
? 主因出在node.js的fs.writeFile函式會把存入字串存入Buffer,因為同位
異步的暫存,間接使得在存入字串改變後,原始寫入資料依然存在,而
造成無法釋放。
?在此,改用writeFileSymc來將存入Buffer字串能以同步方式釋放。
~45~
建立一個影像長寬
?一般編碼影像所需的空間:
?√(Buffer Length*Channel Sum + 2*Hash Key + DecodeHeader)/4?
?亂數編碼影像所需的空間:
?√(Buffer Length*Channel Sum + 2*Hash Key + DecodeHeader)?
?在此為了讓影像固定為方形,而開根號並取上高斯
? 同時還需將此數值轉成16進位,才可儲存為真正的影像標記
~46~
還原法設計
?還原法設計重點:
? 由於在轉成影像資料時已經 mod 256還原
?在此還原則需進行測試:
? 需先測試還原值是否會小於0,若小於0則輸入先加256在進行解密。
?安全設計要點:
? 末尾補0資料會被捨棄,因為根本不用補0。
~47~
音訊加密界面
~48~
偽造BMP影像成果
無加密 線性位移加密 交錯級數加密
~49~
偽造BMP影像成果
sin函數加密 cos函數加密 亂數加密
解密
DECRYPTION
~51~
解密方式
1. 開啟檔案並擷取BMP檔的Header
2. 將原本的buffer資訊還擷取
3. 解一次hash確認是否符合解密方式
4. 讀取21Byte子Header
5. 解二次hash再次確認是否前一次hash是巧合
6. 解密buffer各節點音訊,並還原到buffer
7. 確認是否有Channel 2(沒有,則結束)
8. 若有,則將屬於Channel 2節點音訊還原到Channel 2
~52~
WaveSurfer.js上無法直接改寫buffer設定
?於是:
1. 先決定Buffer要設定的資料
2. 偽造一個wav音訊檔
3. 讀取此wav音訊檔
4. 用其header偽造的Buffer設定
~53~
自己手動建立一個Buffer
BMP
Image
Fake
Audio
Buffer
? Channel Sum
? SampleRate
? Point Sum ? Wave File Data
? Decode Option Header
? All In Channel Point Data
Mix A MusicDecode Input Image
~54~
分析wav檔 Header
?以下為wav檔的header描述:
52 49 46 46 0C 06 00 00 57 41 56 41 56 45 66 6D
74 20 10 00 00 00 01 00 01 00 F8 2A 00 00 F0 55
00 00 02 00 10 64 61 74 61 E8 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
~55~
分析wav檔 Header
?以下為wav檔的header描述:
52 49 46 46 0C 06 00 00 57 41 56 41 56 45 66 6D
74 20 10 00 00 00 01 00 01 00 F8 2A 00 00 F0 55
00 00 02 00 10 64 61 74 61 E8 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ....
也就是只要改Channel數、子區塊大小、wav音訊內容
就能偽造我們wav音檔,在此我們要利用此內容生成Buffer
~56~
分析wav檔 Header
?Channel數:x01 或 x02
? 代表Channel數為1或2個
?子區塊大小:
? 為:(音訊長*Channel數*取樣率)/8
? 但在此由於wav檔的音訊內容皆為x00,所以只需改成:音訊長/2
?wav音訊內容:全部填 x00
~57~
偽造WAV音訊Buffer還原成果
~58~
小結
?在此我們可以應用偽造檔案,以欺騙非溝通方的對此資訊基礎識
別,來達到加密效果。
?當然網路上也有類似的案例(雖然大多不是用於加密用途),用
base64的格式將文字資訊轉成影像的案例可尋:
? 線上影像轉Base64:https://www.base64-image.de/
? 用GAN生成影像並由base64編碼圖片訊息:https://make.girls.moe/
未來展望與推測
FUTURE & DECRYPTION
~60~
目前架構的問題點
?加密上,會造成資料過度膨脹,以至於一般人看到這BMP檔,就
會覺得有問題,尤其使用亂數加密還會使得資料倍增4倍。
?無實做出完全將資料偽裝,這部份和隱寫技術有關,該部份應該
隨機產生亂數值,並用低位元資訊(LSB)來做到音訊資料隱寫。
?因為有點懶,所以下載解密音訊是沒有實做的。所以實際上解密
音訊,僅能在此播放器中播放,而無法直接下載的,但實際上應
該很容易就能做出錄音下載的功能。
~61~
改良方式(一)
一張Bmp
影像
使用真實影像,並將音訊資訊藏於alpha
channel 做儲存。
優勢:部份情況下注意不到圖檔
缺點:檔案更大,圖片帶訊量有限
GR B A GR B A GR B A GR B A
???? ?? 00 ???? ?? 00 ???? ?? 00 ???? ?? 00
~62~
改良方式(二)
一張Bmp
影像
改用在制定特定位置進行資料除存,其
餘都需用亂數。
優勢:非常有效隱藏資訊
缺點:檔案更大(外加header)
GR B A GR B A GR B A GR B A
00亂數 亂數 亂數 亂數亂數 亂數 00 亂數亂數 亂數 亂數 00亂數 亂數 亂數
~63~
在此猜想得到的簡單臆測
?當我們使用在使用最於改造既有資訊表示,並進行加密來隱藏真
實資料時,若帶有垃圾資訊,可以對於資訊進行更有效複雜化。
?在此,對於未來無條件安全做出一個實踐假設,當資訊帶有的垃
圾量多到無法永遠被非解密方式抽樣處理時,能做到位元資料以
當代電腦無法處理的巨量垃圾(亂數)資料隱藏且加解密用的
Header不放入檔案時,能夠達到某種程度上的安全。
?備註:
? 該垃圾資料即便被量子電腦用暴力破解組合,也會產生由垃圾造成的多
種可能,已達到無法識別的安全化與一資料多意義。
介紹Image-Audio-Player
IMAGE-AUDIO-PLAYER
~65~
運行條件
?直接clone專案安裝相依:
? Node.js與npm管理套件
?安裝流程:
? git clone https://github.com/Lian0123/Image-Audio-Player.git
? cd Image-Audio-Player
? npm install
?啟動程式:
? npm run start #if you have electron2
? npm run start1 #if you haven't electron2, only have electron
~66~
打開程式
在已安裝完成程式後執行:
npm run start
~67~
加密操作
選擇音訊檔
~68~
加密操作
選擇檔案
按下Open
選擇檔案
按下Open
~69~
加密操作
按下開啟
~70~
加密操作
接著會看到載入的音檔
(可播放)
~71~
加密操作
選擇加密法
~72~
加密操作
按下建立
~73~
加密操作
等待其加密完成後
再按下下載
~74~
加密操作
檔案會存到程式下的
OutFile資料夾中
~75~
解密操作
先切換到解碼器
~76~
解密操作
選擇剛才加密的音訊檔案
(已經是BMP影像) 再按下Open
~77~
解密操作
按下開啟
~78~
解密操作
系統會自動幫你偵測
其解密資訊
等到播放器初始化後
再按下解密
~79~
解密操作
這時我們就能得到解密後
的音檔(可播放)
參考資料
REFERENCE
~81~
參考資料
?https://www.w3resource.com/javascript-exercises/javascript-
string-exercise-28.php
?https://stevenchen886.blogspot.com/2013/03/bitmap.html
?https://zh.wikipedia.org/wiki/WAV
?http://soundfile.sapp.org/doc/WaveFormat/
?https://nodejs.org/zh-cn/docs/guides/buffer-constructor-
deprecation/
~82~
參考資料
?https://github.com/nodejs/node/issues/11289
?https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%
E7%99%BC/260969/
?https://sofree.cc/base64-images/

More Related Content

Image-Audio-Player 程式原理說明(107-2 資安暨DSP期末專案報)