갤럭시 A 퀀텀(A716S)의 QRNG로 난수 생성

2020. 8. 2. 01:48모바일/Android

갤럭시 A 퀀텀은 갤럭시 A71 5G (엑시노스 980판)의 변종 모델으로, 스위스 IDQ(ID Quantique)의 QRNG(Quantum Random Number Generator; 양자난수생성기)인 "IDQ S2Q000"을 탑재했다는 특징이 있습니다. 아마도 IDQ250C2의 커스텀 칩이 아닌가 싶지만 공개된 정보가 많지 않아서 확실하지는 않습니다.

기본적으로 IDQ의 QRNG는 LED와 CMOS센서로 구성된 장치인데, 양자잡음에 의해 LED가 무작위한 수의 광자(光子)를 방출하면 CMOS센서에서 그것을 감지, 계수(計數)하여 난수를 생성하는 구조로 되어 있다는 모양입니다.

QRNG칩은 I2C 인터페이스로 연결되고, /dev/qrandom 이라는 문자 디바이스로 매핑되어 있는... 것 같은 느낌이 듭니다.

config HW_RANDOM_S2Q000_MISC_DEVICE
	tristate "Create character device for qrng"
	default n
	depends on HW_RANDOM_S2Q000
	help
	  This will create /dev/qrandom character device
	  qrandom will be provides random value via QRNG.
	  If you want to use /dev/qrandom character device
	  say Y here, otherwise say N

실제로 /dev 하위를 찍어 보면 이렇습니다.

a71x:/ $ ls -al /dev | grep random
ls: /dev/.coldboot_done: Permission denied
ls: /dev/cgroup_info: Permission denied
cr--r-----  1 root         system        10, 183 2020-07-31 23:19 hw_random
crw-r--r--  1 root         root          10,  88 2020-07-31 23:19 qrandom
crw-rw-rw-  1 root         root           1,   8 2020-07-31 23:19 random
crw-rw-rw-  1 root         root           1,   9 2020-07-31 23:19 urandom

그렇다면 문자 디바이스에서 값을 읽어서 쓰는 것만으로 간단한 양자-난수를 생성할 수 있겠지요.

a71x:/ $ dd if=/dev/qrandom of=/sdcard/wowsuchrandom bs=32 count=1
1+0 records in
1+0 records out
32 bytes (32 B) copied, 0.005535 s, 5.6 K/s

a71x:/ $ xxd /sdcard/wowsuchrandom
00000000: a117 a9c2 98c0 bef9 bf84 a17a 7342 1373  ...........zsB.s
00000010: 7756 1677 8d97 b2b3 519b b8d0 6dcc 78ff  wV.w....Q...m.x.

이렇게 256비트짜리 양자-키를 만들었습니다 (아마). 우와 정말 데단헤!