qr-code介紹

11 May 2019

簡介

QRCode就是能夠利用圖片來encode資訊,當我們用掃描器掃的時候就能讀取qrcode圖片內所隱藏的資訊。 而特色是他有完整的error correction機制,即使圖片有部分受到髒污或者被扭曲(圖片被折到)之類的仍能夠復原裡面的資訊,所以是一個蠻robust的資料傳遞方式。

但也因為這種error correction機制,因此沒有完全銷毀的qrcode是有可能被讀取裡面的機密資訊,這也是在ctf裡蠻常見到的題目。給定一張損毀的qrcode,試圖讀取裡面的資訊。

能夠encode的data數量依據qrcode version, character種類而不同。

例如: 如果qrcode的資料只有包括數字,那encode時每個symbol可以用較少bit encode,所以一個qrcode就可以存更多的symbol。相反如果是以byte為symbol,那能存的資訊量較少。

另一個是version,version越大能存的資料量越多,有40種version OAO。

架構

由上圖得知,qrcode大概有分這幾個部分

1. Quiet Zone

算是一個qrcode的邊界,全空白的區域,這部分算是告訴scanner說這個區域以內的地方都是qrcode的內容,例如在周圍環境比較亂的地方,scanner還是能找到qrcode,例如在報紙上、骯髒的紙上之類的。

2. Finger pattern

這三個地方能夠幫忙訂位qrcode的位置和其他data的位置,就是以這3個大框框來當pivot定位其他資料的位置

3. Alignment pattern

目的在於保證就算透過不同角度、或者圖片被凹過折過都還能讀取qrcode的資訊。例如從角度低的地方掃描,那這個alignment pattern就會看起來較細長,scanner就會有對應的方法來做decode

4. Timing pattern

連接3個Finder Pattern的區段,這可以幫助找到qrcode裡的data cell,尤其是在qrcode圖片有損毀時

5. Version information

qrcode有不同的version,分別就是指不同大小,可以看qrcode有幾格來知道是哪個version(也可以透過角落那3個大格的得知)

6. Data cell

除了上述所說的區域都是Data部分

7. format

可以看出他的error correction rate是哪種,如下所述,error correction有4種

Construction

1. Data analysis

根據資料的datatype來決定encode的模式

2. Data encoding

Version selection

做encoding,包含決定要用的qrcode version,error correction(會選擇最小的能塞進我們所有data的qrcode)。

Character Count

接著計算symbol數目,用2進制把他存起來,然後把他pad成9 bit,例如symbol數目是11,則character count就是000001011

Data encoding

這部才是真正對我們的資料做encode

Codeword

首先把encode完資料pad成qrcode可以容納的max size 把encode結果split成8 bit一個codeword

3. Error Correction Coding

利用Reed-Solomon error correction
QR code掃瞄器可以透過同時掃描data code跟error code來看這個data是否正確。

Error Correction有分四種level(L,M,Q,H),個別有不同的error correction capability

詳情 documentation

Reference

qrcode structure
qrcode wiki
how qrcode works
qrcode datatype
qrcode character capability
qrcode online