얼마전에 공학용 계산기에 6면주사위(엔트로피 2.5849)를 99번 이상 굴려 256비트 이상의 엔트로피 값을 생성 . 계산기에 입력 후 SHA256연산을 통해 BIP39 니모닉을 만들어 주는 프로그램을 만들어 쓰고 있는데요.
이 방법으로 니모닉을 만드려면 편향되지(특정 숫자가 나오지 않는 / 밸런스가 균등한 )않은 주사위가 필요하다고 해서 예전에 베가스에서 기념으로 사온 카지노 주사위를 찾아봤는데 도대체 어디로 갔는지 찾을수가 없어서 알리에서 주문했는데 오늘 도착했네요.
계산기 없이 니모닉 매칭하기 위해 정8면체 주사위도 같이 주문했습니다.
그런데.. D6주사위는 카지노 등급/ 블레이드 엣지/ 시리얼 등등의 광고와 달리 일반 주사위가 왔네요. ㅜ.ㅜ

일단 소금물로 밸런스 테스트를 해보았습니다.


1번과 3번 엣지로 떠올라서 1번 면으로 올라옵니다. 간혹 3번과 5번도..
5개를 테스트해 봤는데 1,3번으로 3개가 떠오르고 5번으로 떠오르는 녀석도 1개..
밸런스가 맞지 않고 제품설명과 달라 일단 반품신청을 했습니다.
그리고 제품 회수 포장전에 실제 굴리기 테스트를 해봤습니다.
1번 실험자 - 손으로 바닥에 던져 굴리기 5개 동시 60번
| 숫자 | 출현 횟수 | 실제 비율 | 정상 기대치 | 오차 |
| 1 | 55회 | 18.33% | 50회 (16.66%) | +5 |
| 2 | 49회 | 16.33% | 50회 (16.66%) | -1 |
| 3 | 54회 | 18.00% | 50회 (16.66%) | +4 |
| 4 | 42회 | 14.00% | 50회 (16.66%) | -8 |
| 5 | 38회 | 12.67% | 50회 (16.66%) | -12 (최소 출현) |
| 6 | 62회 | 20.67% | 50회 (16.66%) | +12 (최다 출현) |
2번 실험자 - 손으로 대충 굴리기 5개 동시 60번
| 숫자 | 출현 횟수 | 실제 비율 | 정상 기대치 | 오차 |
| 1 | 76회 | 25.33% | 50회 (16.66%) | +26 (비정상적 폭발) |
| 2 | 38회 | 12.67% | 50회 (16.66%) | -12 (최소 출현) |
| 3 | 44회 | 14.67% | 50회 (16.66%) | -6 |
| 4 | 51회 | 17.00% | 50회 (16.66%) | +1 (정상 범주) |
| 5 | 45회 | 15.00% | 50회 (16.66%) | -5 |
| 6 | 46회 | 15.33% | 50회 (16.66%) | -4 |
1번 실험자가 카지노처럼 살짝 쿠션있는 벽을 만들고 벽에 던저 바닥(마우스패드)에 떨어지는 방식 5개 동시 - 60회
| 숫자 | 출현 횟수 | 실제 비율 | 정상 기대치 | 오차 |
| 1 | 58회 | 19.33% | 50회 (16.66%) | +8 (꾸준한 상위권) |
| 2 | 36회 | 12.00% | 50회 (16.66%) | -14 (압도적 꼴찌) |
| 3 | 56회 | 18.67% | 50회 (16.66%) | +6 |
| 4 | 51회 | 17.00% | 50회 (16.66%) | +1 |
| 5 | 53회 | 17.67% | 50회 (16.66%) | +3 |
| 6 | 46회 | 15.33% | 50회 (16.66%) | -4 |
소금물 편향테스트에서 1,3번이 유독 많이 나왔었는데 실제 던지기에서도 비슷한 결과를 보여줘서 깜짝 놀랐습니다.
재미있는건 던지는 사람에 따라 결과가 좀 다르게 나온다는거였는데
벽면에 던져 굴러가도록 해보니 사람에 따른 편차가 줄어들었습니다.
주사위 던지던중 5가 유독 많이 나오는 경우가 있어서 - 연속으로 5번도.. 5번 편향됬던 주사위를 골라서 이거 하나만 테스트 했습니다. - 쿠션벽에 던져 떨어지는.. 1개로 120회.
| 숫자 | 출현 횟수 | 실제 비율 | 정상 기대치 | 오차 |
| 1 | 16회 | 13.33% | 20회 | -4 |
| 2 | 11회 | 9.17% | 20회 | -9 (압도적 꼴찌) |
| 3 | 25회 | 20.83% | 20회 | +5 |
| 4 | 22회 | 18.33% | 20회 | +2 |
| 5 | 26회 | 21.67% | 20회 | +6 (최다 출현) |
| 6 | 20회 | 16.67% | 20회 | 0 (정확히 일치) |
5번이 제일 많이 나오니 결국 2번은 최저횟수로 나오더군요.
이주사위들은 1/3 엣지나 1/3/5가 만나는 꼭지쪽이 가벼워 소금물 속에서 회전하면서 올라오곤 했었는데..
실제 던져보니 바로 확인이 되네요..
이렇게 편향된 주사위도 사실 샤넌 엔트로피 관점에서 보면 그리 많이? 떨어지지는 않습니다.
120회 투척 데이터를 확률($p_i$)로 변환합니다.
-
1: 16회 ($p_1 \approx 0.1333$)
-
2: 11회 ($p_2 \approx 0.0917$) ➔ 최소
-
3: 25회 ($p_3 \approx 0.2083$)
-
4: 22회 ($p_4 \approx 0.1833$)
-
5: 26회 ($p_5 \approx 0.2167$) ➔ 최다
-
6: 20회 ($p_6 \approx 0.1667$)
-
섀넌 엔트로피를 구하는 공식은 다음과 같습니다.
$$H(X) = - \sum_{i=1}^{n} p_i \log_2(p_i)$$
이 공식에 각 숫자의 확률을 대입하여 더해줍니다.
-
$1: -0.1333 \times \log_2(0.1333) \approx 0.3876$
-
$2: -0.0917 \times \log_2(0.0917) \approx 0.3161$
-
$3: -0.2083 \times \log_2(0.2083) \approx 0.4714$
-
$4: -0.1833 \times \log_2(0.1833) \approx 0.4487$
-
$5: -0.2167 \times \log_2(0.2167) \approx 0.4780$
-
$6: -0.1667 \times \log_2(0.1667) \approx 0.4309$
모든 값을 합산하면 최종 엔트로피 값이 나옵니다.
최종 엔트로피 $H(X) \approx 2.5327\text{비트}$
-
정상적인 D6 주사위의 엔트로피: $\log_2(6) \approx$ 2.5849비트
-
불량 D6 주사위: 2.5327비트 (약 0.05비트 하락)
100번 던지면 정상 주사위에 비해 5비트 하락하고 2-3번 더 던지면 목표치인 256비트가 획득가능하긴 합니다..
그런데 여진히 찜찜하긴 합니다. 베가스에서 산 주사위를 찾던지.. 알리에서 다시 한번 사봐야 될것 같네요.
같이산 D8 주사위는 소금물 테스트를 통과했습니다. 보통 불투면 주사위는 사지 말라고 하는데 이녀석은 다행이 괜찮네요.
D8 주사위는 4개를 한꺼번에 굴려서 니모닉 23개를 지정할수 있습니다.
4x8x8x8 = 2048이라 BIP39 니모닉 2048개를 1:1로 선택할수 있죠..
다만 24번째 단어는 체크섬이라 하드웨어 지갑의 24단어 픽업 계산기능을 빌려쓰던지 해야 하는데.. 귀찮아지네요..
전 그래서 그냥 D8 주사위로 90번 굴려 니모닉 만드는 프로그램을 새로 만들었네요..
D8 주사위는 3비트의 엔트로피를 가져서 86번 이상 굴리면 256비트의 엔트로피를 가지는 난수를 만들수 있는데 전에 만든 6면 주사위 프로그램 살짝 손보면 쉽게 변경이 되더라구요.
비트 하락기엔 항상 이런거 하면서 노는거 같네요.. ㅠ.ㅠ
이런것도 있구나 하고 봐주시고 주사위는 필요하시면 카지노 급 주사위로 구매하시거나 좀 더 굴리시면 됩니다..