본문 바로가기

CTF

KalmarCTF Cracking The Casino Write-up

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

 

근데 무작위 값을 어떻게 알아야될지 모르겠음,,,

😩😨😤😖😔 

@#@#$@#$^^#%#$@#$!!!!!!!

 

'CTF' 카테고리의 다른 글

클라우드 서비스 제공업체(CSP)  (0) 2023.12.31