密碼加密器 - secretqr
DESCRIPTION
密碼加密器 - SecretQR. 指導教授:林啟芳 專題生: 971430 詹益晨 973326 朱書賢. 研究動機. 由於 QR Code 的應用日漸普及,所以我們希望利用其便利性製作出一套應用程式。 本計畫主要是 利用 QR Code 的 方便性搭配特殊加密方法,協助一般人克服平常須記憶冗長密碼的困難 。. 系統架構. 系統架構. QR Code 編碼、解碼. QR Code 簡介. 簡易 比普通條碼能儲存更多資料 不受方向限制. QR Code 簡介. 可儲存資料類型分為數字、字母、二進位數等 共 40 種規格,數值越大所能容納的資料越長. - PowerPoint PPT PresentationTRANSCRIPT
密碼加密器 - SecretQR
指導教授:林啟芳專題生: 971430 詹益晨 973326 朱書賢
研究動機• 由於 QR Code 的應用日漸普及,所以我們希望利用其便利性製作出一套應用程式。• 本計畫主要是利用 QR Code 的方便性搭配特殊加密方法,協助一般人克服平常須記憶冗長密碼的困難。
2
系統架構
3
系統架構• QR Code 編碼、解碼
4
QR Code 簡介• 簡易• 比普通條碼能儲存更多資料• 不受方向限制
5
QR Code 簡介• 可儲存資料類型分為數字、字母、二進位數等• 共 40 種規格,數值越大所能容納的資料越長
6
QR Code 資料容量 (Ver. 40)
數字 最多 7089 字元字母 最多 4296 字元
二進位數 (Byte) 最多 2953 字元中文 (UTF-8) 最多 984 字元中文 (BIG5) 最多 1800 字元
QR Code 簡介• 具容錯能力,分 L 、 M 、 O 、 H 四種
7
容錯等級L 7% 的編碼可被修正M 15% 的編碼可被修正O 25% 的編碼可被修正H 30% 的編碼可被修正
• AndroidQREncode(sourceString, qrCodeVersion); // 將 QR Code level 及需要編碼的資料當作參數
• com.swetake.util.Qrcode // 建構 QR Code 編碼物件
• setQrcodeErrorCorrect(‘M’); // 設定容錯率
• setQrcodeEncodeMode(‘B’); // 設定資料類型
• setQrcodeVersion(4); // 設定版本 ( 可容納資料大小 )
• bytesEncoding = strEncoding.getBytes("utf-8");// 將欲編碼字串轉成 Byte 後,再拿去製作矩陣
QR Encode
8
• calQrcode(bytesEncoding) // 以此函式產生與 QR Code 相對應的 boolean 二維陣列
• for (int i=0;i<bRect.length;i++){for (int j=0;j<bRect.length;j++){ if (bRect[j][i]){ // 依據陣列值,繪出條碼方塊,每個圖為 165*165 mCanvas01.drawRect(new Rect(intPadding_x+j*5, intPadding_y+i*5, intPadding_x+j*5+5, intPadding_y+i*5+5), mPaint01); }}}
QR Encode
9
• decode(byte[] data, int width, int height)// 解碼 QR Code
• rawResult = multiFormatReader.decodeWithState(bitmap);// 取得 QR Code 圖片,然後轉為 rawResult 物件
• Message.obtain(activity.getHandler(), R.id.decode_succeeded, rawResult);// 將產生之 rawResult 轉成 Message 物件,並記錄成功或失敗解碼
• handleMessage(Message message)// 若接收到成功訊息,則接著進行解析解碼完的資訊// 反之,則重新截取圖片
QR Decode
10
• handle(Result rawResult)// 處理解碼後的資料,如:解密亂數部分、顯示資料
• ResultHandler resultHandler = ResultHandlerFactory.makeResultHandler(this, rawResult);
• CharSequence displayContents = resultHandler.getDisplayContents();// 將 rawResult 轉為 ResultHandler 物件// 並透過 getDisplayContests 取得解碼後的字串
QR Decode
11
系統架構• QR Code 編碼、解碼• Source Code ( 原始資料 )• Fetch Code ( 提取碼 )• IMEI Code ( 手機序號 )• 亂數器 – Mersenne Twister
12
增加安全性
Mersenne Twister• 虛擬亂數產生器演算法,簡稱 MT 。• 分為兩種, MT 19937(32-bits) 和 MT 19937-64 。• 若一個字組長度為 k-bits ,此亂數產生器會產生一組亂數且均勻分布於 [0, 2k-1] 。
13
MT 優點• 其設定之週期很長且為最合適的值,週期為
219937-1 。因為若週期過長,將不能保證亂數產生器的品質,若週期過短,可能會產生出額外的問題。• 使用 k-distribution 的方式去作測試,發現在
1 k 623≦ ≦ 的範圍中其亂數能均勻分布。• 與其他的虛擬亂數產生演算法比較,其擁有許多特長,週期長、有效使用記憶體、良好的分布、高效能、速度快。
14
MT 主要功能• 分別為 sgenrand(seed) 和 genrand() 。• sgenrand(seed)– 用來設定初始值給 624 words 的工作區域,
seed 的範圍介於 [1 ~ 232-1] 。• genrand()– 用來產生一個 32 bits 的亂數,並且均勻分布在 0 ~ 232-1 的範圍中。
15
將來會和數據資料作 Exclusive OR並且依照我們所規定之格式去組成亂數字串
QR Encoder 架構
16
原始資料 提取碼 手機序號
亂數器 亂數器 亂數器
組合亂數字串QR Code 編碼輸出圖檔
Random Number
Random String
QR Code
Encryption
Encryption
17
X Y ZFetch IEMI Source
X’ Y ‘ Z’132
⊕ genrand + Y + 101 + X
亂數字串: X’ + Y’ * Z’ % (Source length + 101)
QR Decoder 架構
18
Take a picture 輸入提取碼
QR Code 解碼
比對 QR Code 格式
拆開亂數字串Random String 符合
不符合
QR Decoder 架構
19
亂數器 亂數器 亂數器原始資料 提取碼 手機序號
比對 IMEI
比對提取碼顯示原始資料 不顯示原始資料
符合符合
不符合不符合
Random Number
不符合
Decryption
Decryption
20
X’ Y’ Z’
Fetch IEMI SourceX Y Z312
⊕ genrand- Y - 101 - X
亂數字串: X’ + Y’ * Z’ % (Source length + 101)
操作流程
21
QR Encoder 流程
22
輸入資料 輸入提取碼 輸入提取確認碼 取得 IMEI( 手機序號 )
亂數器加密 QR Code編碼 輸出QR Code
QR Decoder 流程
23
拍照取得QR Code 輸入提取碼 QR Code解碼 判斷編碼格式
亂數器解密 檢查 IMEI是否相符 檢查提取碼是否相符 顯示原始資料
成果總結
24
• 與市面上的眾多 QR Code軟體截然不同 主要用於減輕平常需記憶冗長密碼的煩惱• 操作介面簡單易懂,且附有說明頁面• 加密後的密碼儲存方便且解碼容易• 採用 MT 演算法,快速產生均勻亂數• 解碼方面只需對準圖片掃描即可快速解碼
功能性易用性流暢性
• 主要有三段防護,分別為使用者自訂之 提取碼、編碼手機序號、亂數產生器資料安全
SecretQR 實作
25
SecretQR 實作
26
首頁
說明頁面
SecretQR 實作
27
編碼 – 輸入資料
編碼 – 產生 QR Code
SecretQR 實作
28
解碼 – 掃描 QR Code
解碼 – 解碼成功畫面
Reference
29
• QR Code – Wikipedia, from http://zh.wikipedia.org/zh-tw/QRCode
• 林宗澤、何元敬,「QR Code 數位影片導覽Navigation System using QR Code」,民國99年12月18 日
• Zxing 1.5 – Android , from http://code.google.com/p/zxing• QR Code Encoder Source Code , from http://www.swetake.com• Mersenne Twister – Wikipedia,
form http://en.wikipedia.org/wiki/Mersenne_twister• Mersenne Twister Source Code,
from http://www.axlradius.com/freestuff/Mersenne.java• Makoto Matsumoto & Takuji Nishimura, “Mersenne Twister: A 623-
Dimensionally Equidistributed Uniform Pseudo-Random Number Generator”, ACM Transactions on Modeling and Computer Simulation, Vol. 8, No. 1, January 1998.
Q & A
30
Thank you!