이산로그는 일반 로그와 비슷하게 군론에서 정의된 연산으로 1보다 큰 자연수
, 정수 에 대하여 방정식 (mod m) 만족하는 정수 x가 이산로그이다. 이산로그를 계산하는 다항식 시간(polynomial time) 알고리듬이 알려져 있지 않아 이산로그는 현대 암호에 응용되고 있다.
개요
개념
수학에서 로그는 모두 익숙할 것이다. 일 때 이다. 실수에서는 가 주어졌을 때 를 만족하는 , 즉 를 아주 간단하게 계산할 수 있다. 그러나 에서 주어진 에 대해 를 만족하는 를 찾는 문제가 바로 이산로그 문제이다. 이산 로그 문제에서 는 소수, 는 의 원시근인 것이 좋다.[1]
특징
아직까지 이산 로그 문제에 대한 효율적인 계산법은 나오지 않았습니다.(여기서 효율적인 계산법이라고 하는 것은 참고로 이산 로그 문제는 NP-complete에 속하는 문제는 아니기에 효율적인 계산법이 나올 가능성은 충분히 있습니다. 또한 Quantum Computer에서는 P에 속함이 증명되어 있습니다. 이산 로그는 Elgamal Encryption, Diffie-Hellman 키 교환, Digital Siganature Algorithm 등과 같이 암호화, 키 교환, 인증 등의 각종 암호 분야에서 쓰이고 있습니다. 만약 이산 로그 문제가 효율적으로 풀리게 된다면 위에서 언급한 암호 시스템이 안전하지 않게 됩니다. 또한, 비록 일반적인 이산 로그에 대한 풀이법 자체는 아직 찾지 못했다고 하더라도 a,b,p를 적절하게 택하지 못하는 구현의 실수로 인해 기밀성이 지켜지지 않는 경우도 있습니다. [1]
풀이법
이 풀이법은 가장 떠올리기 쉽고 간단한 풀이법입니다. 바로 에 0부터 까지 차례로 넣어보며 를 만족하는 를 찾는 것 입니다. 아쉽게도 이 방식은 최악의 경우 번의 곱셈이, 평균적으로는 번의 곱셈이 필요하기 때문에 가 1024 bit 혹은 2048 bit인 보통의 경우에는 현실적인 시간 내에 풀이가 불가능하다.
def func(a, b, p):
val = 1
for x in range(p):
if val == b: return x
val = val*a % p
return -1
- Baby-step giant-step Algorithm (아기걸음 거인걸음)
알고리즘의 이름은 생소할 수 있지만 일종의 MITM(Meet In The Middle) 알고리즘으로, 이 알고리즘을 통해 시간복잡도를 에서 로 떨어 뜨릴 수 있다. 해쉬를 이용할 경우 , 정렬을 이용할 경우 에 이산 로그 문제를 해결할 수 있다. 정렬을 이용한 예시 코드는 아래와 같다.
def egcd(a1, a2):
x1, x2 = 1, 0
y1, y2 = 0, 1
while a2:
q = a1 // a2
a1, a2 = a2, a1 - q * a2
x1, x2 = x2, x1 - q * x2
y1, y2 = y2, y1 - q * y2
return (x1, y1, a1)
def inv(a, m):
x, y,g = egcd(a, m)
if g != 1:
raise Exception('No modular inverse')
return x%m
def func2(a, b, p):
table1 = []
k = int(p**0.5)
val = 1
mul = pow(a,k,p)
for i in range(0,p,k):
table1.append((val, i//k))
val = val * mul % p
table2 = []
ainv = inv(a,p)
val = b
for i in range(k):
table2.append((val, i))
val = val * ainv % p
table1.sort()
table2.sort()
idx1 = 0
idx2 = 0
while idx1 < len(table1) and idx2 < len(table2):
if table1[idx1][0] < table2[idx2][0]:
idx1 += 1
elif table1[idx1][0] > table2[idx2][0]:
idx2 += 1
else:
return k*table1[idx1][1]+table2[idx2][1]
return -1
각주
같이보기
- blisstoner , 〈이산-로그〉, 《secmem》, 2019-05-17
이 이산로그 문서는 암호 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.
|
블록체인 : 블록체인 기술, 합의 알고리즘, 암호 알고리즘 □■⊕, 알고리즘, 블록체인 플랫폼, 블록체인 솔루션, 블록체인 서비스
|
|
암호기술
|
개인키 • 경량암호 • 다자간 계산(MPC) • 다중서명(멀티시그) • 동형암호 • 디지털서명 • 링서명 • 배타적 논리합(XOR) • 복호화 • 블랙박스 암호 • 서명 • 소수 • 소인수분해 • 슈노르서명 • 스케인 • 스키테일 • 스테가노그래피 • 안전한 다자간 계산(SMPC) • 암호 • 암호경제학 • 암호문 • 암호키 • 암호학 • 암호화 • 이산로그 • 전자봉투 • 전자서명 • 전치암호 • 종단간 암호화 • 치환암호(대체암호) • 키 • 패딩 • 패스워드 • 평문 • 합성수 • 해독 • 해시 • 형태보존암호 • 혼돈 • 화이트박스 암호 • 확산
|
|
논리연산
|
논리곱(AND) • 논리연산 • 논리합(OR) • 배타적 논리합(XOR) • 부울곱 • 부울대수 • 부울합 • 부정논리곱(NAND) • 부정논리합(NOR) • 부정연산(NOT)
|
|
SHA
|
SHA • SHA0 • SHA1 • SHA2 • SHA224 • SHA256 • SHA384 • SHA512 • SHA512/224 • SHA512/256 • SHA3 • SHA3-224 • SHA3-256 • SHA3-384 • SHA3-512
|
|
MD
|
MD • MD2 • MD4 • MD5 • RIPEMD • RIPEMD-128 • RIPEMD-160 • RIPEMD-256 • RIPEMD-320
|
|
기타 해시
|
CRC-16 • CRC-32 • CRC-64 • Keccak-256 • Keccak-384 • Keccak-512 • Shake-128 • Shake-256 • 베이스32 • 베이스32 파일 • 베이스58 • 베이스64 • 베이스64 파일 • 순환중복검사
|
|
대칭키
|
AES • ARIA(아리아) • DES • HIGHT(하이트) • LEA • SEED(시드) • 대칭키 • 대칭키 암호 알고리즘 • 디피-헬만 • 디피-헬만 키교환 • 레인달 • 블로피시 • 블록암호 • 스트림 암호 • 에스박스(S-Box) • 트리플 DES
|
|
비대칭키
|
PKI • RSA • 공개키 • 공개키 암호 알고리즘 • 비대칭키 • 엘가말 • 타원곡선 • 타원곡선 디지털서명 알고리즘 • 타원곡선암호
|
|
영지식증명
|
영지식 상호 증명(ZKIP) • 영지식 스나크 • 영지식 스타크 • 영지식증명
|
|
양자암호
|
BB84 프로토콜 • E91 프로토콜 • B92 프로토콜 • 비밀키 오류율 • 안전성 증명 • 양자난수생성기 • 양자내성암호 • 양자암호 • 양자얽힘 • 양자역학 • 양자중첩 • 양자컴퓨터 • 양자키 • 양자키분배 • 양자통신 • 연속 변수 프로토콜
|
|
암호해독
|
기지평문공격(KPA) • 선택암호문공격(CCA) • 선택평문공격(CPA) • 암호공격 • 암호문 단독공격(COA) • 암호해독
|
|
암호학 인물
|
라이언 플레이페어 • 레너드 애들먼 • 로널드 리베스트 • 마틴 헬만 • 블레즈 드 비즈네르 • 아디 샤미르 • 앨런 튜링 • 웨슬리 피터슨 • 찰스 휘트스톤 • 휫필드 디피
|
|
위키 : 자동차, 교통, 지역, 지도, 산업, 기업, 단체, 업무, 생활, 쇼핑, 블록체인, 암호화폐, 인공지능, 개발, 인물, 행사, 일반
|
|