'll Hacker
KalmarCTF Cracking The Casino Write-up 본문
Contents
728x90
코드 분석
<Rule>
믿을 수 있는 주사위와 카드: 블랙잭과 크랩스를 믿을 수 있는 방식으로 구현하기 위해서는 검증 가능한 주사위와 카드가 필요합니다. 정보 이론적인 커밋먼트를 사용하여 플레이어가 부정을 저지르지 못하도록 함: 플레이어가 부정을 저지르는 것을 방지하기 위해 정보 이론적인 커밋먼트를 사용했습니다.
<게임선택>
1. 주사위 게임
- 1~6사이 무작위 정수 생성
roll -> 주사위를 굴린 결과 - #주사위결과 검증
pk -> 커밋에 사용된 키
comm -> 커밋된 값
guess -> 추측한 값
r -> 커밋에 사용된 임의의 값
2. 카드 게임
- #카드 뽑기(draw_card)
suits -> 카드 무늬
C (클로버), S(스페이드), D (다이아몬드), H(하트)
value = 카드값 (2,3,4,5,~,Ace)
card -> value + suit - #커밋된 값과 추측한 값 검증
pk -> 커밋에 사용된 키(key)
comm -> 커밋된 값
r -> 커밋에 사용된 임의의 값 - #디버깅
주어진 키와 무작위로 생성된 값에 대한 커밋된 값과 함께 반환하는 것으로 보입니다.
이를 통해 디버깅과 테스트 목적으로 사용할 수 있습니다.
<게임 실행과정>
1337번의 반복동안 게임을 실행합니다.
게임 결과에 따라 정답의 개수를 측정합니다.
만약 정답의 개수가 100이 되면, 카지노가 해킹당했다는 메시지를 출력하고 플래그를 제공합니다.
사용자애개 주사위 및 카드 결과를 추측할 수 있는지 묻는 질문을 출력하고, 사용자로부터 입력받음
사용자가 n을 입력한 경우
- 커밋된 값과 함께 결과를 출력
- 커밋된 값과 함께 주어진 추측 값과 임의의 값으로 verif 함수를 호출하여
사용자가 y를 입력한 경우
- 추측한 값을 입력받음
- 주어진 추측 값과 함께 커밋된 값과 임의의 값으로 추측값이 올바른지 검증
- 추측값이 올바르다면 correct 값을 증가시키고 성공 메시지 출력
- 올바르지 않은 경우 오류 메시지를 출력하고 프로그램 종료
💡 추측값을 알기 위해 먼저 알아야될것 💡
- 공개 키 정보 = q, g, h <- 나와있음,,
- 커밋된 값 = 해독하려는 실제 값
- 커밋된 값에 대한 무작위성 = 실제 값과 함께 무작위 값을 사용하여 생성 -> 무작위값
- 커밋된 값과 무작위 값의 관계
- 커밋된 값 g = 실제 값의 거듭제곱
- 무작위 값 h = 실제값에 대한 무작위 거듭제곱
- commitment = (g^x * h^r) mod q
근데 무작위 값을 어떻게 알아야될지 모르겠음,,,
😩😨😤😖😔
@#@#$@#$^^#%#$@#$!!!!!!!
728x90
'CTF' 카테고리의 다른 글
클라우드 서비스 제공업체(CSP) (0) | 2023.12.31 |
---|