Security/암호학(Cryptography)

Fault Attack on RSA CRT

2023. 5. 17. 19:22
목차
  1. RSA CRT
  2. Fault Attack (Bellcore attack)
  3. 대응 방안 (작성 중, 미완성)
반응형

 

https://neutrinox4b1.github.io/blog/2023/Invalid_RSA_decryption_code/

 

Invalid_RSA_decryption_code | Neutrinox4b1 ⚛

When d is the private key, RSA decryption using CRT is done as follows: mp = c^dp mod p (dp = d mod p-1) mq = c^dq mod q (dq = d mod q-1) qinvp = q^(-1) mod p s = (mp-mq) mod p m = mq+sqinvpq Unfortunately, I implemented the decryption code incorrectly. In

neutrinox4b1.github.io

핵테온 본선 문제이다.

 

이전에 BSidesSF CTF 에서 이와 비슷한 문제를 푼 경험이 있어서 풀었으나, 원리를 명확히 이해하지는 못했다.

 

이번 글에서는 그 원리를 자세히 이해해보고자 한다.

https://medium.com/asecuritysite-when-bob-met-alice/ecdsa-signatures-can-be-cracked-with-one-good-signature-and-one-bad-one-2d8bc71949e9

 

ECDSA Signatures Can Be Cracked With One Good Signature and One Bad One

I have been reading an excellent paper [1] and it outlines the usage of the fault attack on ECDSA signatures. With this we just need one…

medium.com

 

비슷한 글로 ECDSA에 대한 예시가 있다. 그러나 이 글에서는 RSA CRT에 대해서 알아본다.

 

 

RSA CRT


 RSA는 몇 가지 버전이 있다. 가장 첫 버전은 RSA 78로 R. Rivest, A. Shamir, L Adleman에 의해 제안되었다. 우리가 익히 알고있는 RSA 방식이다. 이는 키의 길이가 커지면 지수 크기가 증가하여 연산이 기하급수적으로 증가한다는 특징이 있다.

RSA 82부터는 이 문제를 해결하기 위해서 CRT(Chinese Remainder Theorem)을 사용한다. 기존 RSA 연산을 p, q에 대해서 각각 수행하고 CRT를 이용해서 결합하는 것이다. 기존 RSA 에 비해 최대 4배정도 빠른 연산이 가능하다.

 

전자 서명에 대해서, 평문을 비밀키로 암호화할 때를 보자.

평문 $M$ 과 서명 $S$ 에 대해, 우리가 서명하는 과정은 $S = M^d \pmod N$이다.

이를 CRT를 사용하여 해결한다. 우선 비밀키 $d_p$와 $d_q$를 만든다. ($d_p$, $d_q$를 쓰지 않으면 RSA CRT를 쓰는 이유가 그닥..)

 

$$d_p = e^{-1} \pmod {p-1}$$

$$d_q = e^{-1} \pmod {q-1}$$

 

그리고 $d_p$와 $d_q$를 사용하여 각각 서명한다.

$$S_p = S \bmod p = M^{d_p} \pmod p$$

$$S_q = S \bmod q = M^{d_q} \pmod q$$

 

이제 $CRT(S_p, S_q)$를 하면 S를 얻을 수 있다. 이를 계산하는 방법으로 Gauss 방법과 Garner 방법이 있다.

보통 Garner 방법이 Gauss방법보다 효율적이라 Garner 방법을 사용한다.

 

$q_{inv} = q^{-1} \bmod p$ 인 $q_{inv}$를 구한다.

$$h = q_{inv} (S_p - S_q) \pmod p$$

$$S = S_q + hq$$

 

$h$는 p에 대한 q의 역원에 

 

평문에 서명한 S를 구할 수 있다.

 

$h = q_{inv} (S_p - S_q) \pmod p$를 사용해서 $S = S_q + hq$로 구하는 과정에 대한 설명

더보기

이전에 CRT를 하기 위해서 그냥 생으로 연립한 과정이 있었는데 이를 일반화 한 것이다.

 

예를 들어

$x \equiv 2 \bmod 3$

$x \equiv 3 \bmod 5$

가 있다고 하자.

 

이걸 예시로 연립한다고 할 때, 첫번째 식에서 $y \in Z$ 에 대해 $x = 3y + 2$ 이고 이걸 두 번째 식에 대입하면

 

$3y + 2 \equiv 3 \bmod 5$이다. 그럼 우리는 y를 구하기 위해

$3y \equiv (3-2) \bmod 5$

mod 5에 대한 3의 역원은 2이므로 y=2이다.

 

따라서 x = 3 * 2 + 2 이므로 8이다.

 

여기서 일반화해본다.

 

$x \equiv 2 \bmod 3$에 대해 3은 $p$이고 $S_p = 2$이다.

$x \equiv 3 \bmod 5$에 대해 5는 $q$이고 $S_q = 3$이다.

 

처음에 만든 식 $x = 3y + 2$에서 $x = py + S_p$가 된다.

 

$3y + 2 \equiv 3 \bmod 5$ 에서 $y$를 구하는 과정 $3y \equiv (3-2) \bmod 5$ 는

$py \equiv (S_q - S_p) \bmod q$

 

양변에  $p^{-1} \bmod q$를 구해서 곱한다. 이게 $p_{inv}$

 

$y = p_{inv} (S_q - S_p) \bmod q$ 가 된다.

$y$를 $h$로 바꿔 생각해보면 이해가 된다.

 

그럼 여기서 구한 h를 가지고 $x = py + S_p$ 부분에 대입한다.

 

$x = S_p + ph$

 

이렇게 CRT를 일반화 한 것이었다...

 

Fault Attack (Bellcore attack)


위와 같이 서명하는 과정에서 오류가 있으면, 정상적인 서명, 비정상적인 서명을 가지고 p값을 계산할 수 있다.

 

$$h = q_{inv} (S_p - S_q) \pmod p$$

$$S = S_q + hq$$

 

이 과정에서 $S_p$가 오류가 생겨서 (이를테면, $d_p$를 잘못 구한다던가, $S_p$에서 모듈러를 잘못 쓴다던가) $S_p'$이 만들어졌다고 하자, $S_p, S_q$에서 한 가지만 집어서 말하는 이유는 오류가 두 곳에서 발생하면.. 그건.. 그냥 암호화가 안된거 아닌가?

 

어차피 p, q에는 순서가 없으니 $S_p$에서 오류가 있으면 $S_p'$이라고 하자.

 

그렇게 만들어진 정상적인 서명 $S$와 비정상 서명 $S'$에 대해서 $\gcd (S - S', N) = q$가 된다는 것이 Bellcore 공격이다.

 

$S_p$에 에러가 있고 $S_q$가 정상일때 두 서명을 빼면,

$S = S_q + hq$에서 $S_q$는 서로 공통이므로 제거된다.

h를 볼때, $S$와 $S'$은 서로 다른 h를 가진다.

 

$$h = q_{inv} (S_p - S_q) \pmod p$$

$$h' = q_{inv} (S_p' - S_q) \pmod p$$

 

따라서, $S - S' = hq - h'q$이고 $q \mid S - S'$이므로 $\gcd(S - S', N) = q$이다.

 

대응 방안 (작성 중, 미완성)


이러한 방법으로 공격이 가능하다는 걸 알았으니 대응 방안도 있을 것이다.

국내 논문(하재철; 박제훈; 문상재. 오류 확산 기법을 이용한 CRT-RSA 오류 주입 공격 대응 방안. 정보보호학회논문지, 2008, 18.2: 75-84.)에 소개된 대응 방법을 알아보자.

 

두 번 연산 확인 기법, 메시지 복원 기법

이 두 가지는 간단히 떠올릴 수 있는 방법이다.

우선, 두 번 연산 확인 기법은 오류가 생겼는지 검사하는 것이다.

그러나 많은 연산을 요구하고 영구적 결함을 가지는 시스템에서 오류가 생성되었는지 검사할 방법이 없다.

 

메시지 복원 기법은 공개키 e를 이용해서 원래 메시지를 복원하고 오류의 유무를 판단한다. 이 또한 공개키가 크다면 연산이 많아지고, 일부 시스템에서는 공개키에 대한 접근을 허용하지 않는다.

 

Shamir 기법

32bit 랜덤 수 r을 사용해서 $S^{*}_p = m^d \bmod pr$, $S^{*}_q = m^d \bmod qr$으로 생성한다.

그리고 $S^{*}_p \equiv S^{*}_q \bmod r$이라면 서명이 출력되도록 한다. 왜지..?

반응형
  1. RSA CRT
  2. Fault Attack (Bellcore attack)
  3. 대응 방안 (작성 중, 미완성)
'Security/암호학(Cryptography)' 카테고리의 다른 글
  • [CryptoHack] RSA Starter 1
  • Sage 설치
  • [CryptoHack] Bean Counter
  • [CryptoHack] Symmetry
그믐​
그믐​
neutrinox4b1그믐​ 님의 블로그입니다.
그믐​
neutrinox4b1
그믐​
전체
오늘
어제
  • 분류 전체보기 (288)
    • Write up (Wargame) (121)
      • Pwnable (60)
      • Reversing (0)
      • Web Hacking (8)
      • Forensic (1)
      • Cryptography (6)
      • LOB (10)
      • misc (0)
      • SF pwnable 기초 (10)
      • SF pwnable 심화 (1)
      • LOS (25)
    • Security (73)
      • 시스템 해킹(PWN, System) (21)
      • 리버싱(Reverse Engineering) (1)
      • 포렌식(Forensic) (3)
      • 암호학(Cryptography) (44)
      • 네트워크(Network) (1)
      • 임베디드(Emebedded) (0)
    • Develop & CS (38)
      • Algorithm & Data Structure (6)
      • Baekjoon (11)
      • C, C++ (8)
      • Python (2)
      • R (1)
      • etc (8)
    • 프로젝트(Project) (7)
      • 시간표&급식 파싱 (1)
      • 남방진동지수 (1)
      • 네트워크 해킹 (5)
    • Daily life (44)
      • My Book (10)
      • Book Review (1)
      • IT Review (1)
      • 일상 팁 (19)
      • 네트워크관리사 (2)
      • 근황 (11)
    • 수학&과학(Mathematics & Science.. (4)

인기 글

공지사항

  • Wargame, CTF별 검색 키워드 정리
hELLO · Designed By 정상우.
그믐​
Fault Attack on RSA CRT
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.