엘가 암호화 알고리즘
엘가 암호화는 공개 키 암호 시스템입니다. 그것은 당사자와 암호화 된 메시지와 비대칭 키 암호화 통신을 사용합니다.
기반 암호 시스템은 찾기 어렵 의 순환 그룹 이산 대수가 어려운 우리가 G 알면서도 및 G의 K를 , G 계산하기 어려운 AK를 .
엘가는 암호 아이디어
앨리스 가정은 밥과 통신하고자합니다.
- 밥은 공개 키와 개인 키를 생성합니다 :
- 밥은 매우 많은 수의 선택 Q 및 순환 그룹 F의 Q를 .
- 환상 기에서 ˚F Q , 그 모든 소자 선택 g 및
구성원 을 매우 충족 된 GCD (A, Q) = 1과 같이 . - 그 다음, G = H 계산 를 .
- 밥 해제 F , H = g , Q 및 g 그의 공개 키와, 그리고 유지 를 개인 키로.
- 앨리스는 데이터를 암호화 밥의 공개 키를 사용합니다 :
- 앨리스 환상 군으로부터 F, 소자 선택 K를 , GCD 있으므로 (K, Q) = 1 .
- 그녀는 G = P 계산 K 및 H = S K = G AK를 .
- 그녀와 M은 S 곱한.
- 그녀는 (P, M * S) = (G 전송 K , M * S 참조).
- 밥은 메시지를 해독 :
- 밥 계산 S ' = P = G AK .
- 그는 M * S S로 나눈 것 ' M, 즉, S = S 수득 '를 .
다음은 파이썬에서 실현 엘가 암호입니다
# 파이썬 프로그램은 엘가 암호화를 설명하기 위해 가져 임의 의 수학 수입 펑 = random.randint (2, 10 ) DEF (a, b) GCD : 만약 은 < B : 리턴 GCD (b, a) ELIF %의 B == 0 : 리턴 B; 다른 : 리턴 GCD (B, A %의 B) # 큰 난수를 생성 데프 gen_key (Q) : 키 = random.randint (POW (10, 20 ), Q) 동안 GCD (Q 키) = 1! : 키 = random.randint (POW (10, 20 ), Q) 리턴 키 # 멱승 잉여 DEF 전력 (A, B, C) : X = 1 및 = 반면 B> : 0 의 경우 B % 2 == 0 : X = (X * Y) %의 C; Y = (Y *의 Y) %의 C B = INT (b / 2 ) 반환 X % C를 # 비대칭 암호화 DEF 암호화 (MSG, Q, H, g) : EN_MSG = [] K = gen_key (Q) # 송신자의 개인 키 S = 전력 (H, K, Q) P = 전력 (g, K, Q) 위한 I 의 범위 (0, 렌 (MSG)) : en_msg.append MSG ([I]) 인쇄 ( " g ^ k를 사용했을 때 " , P) 인쇄 ( " g ^는 AK를 사용 : " , S) 에 대한 I 의 범위 (0, 렌 (en_msg)) : en_msg [I] = S * 워드 (en_msg [I]) 반환 en_msg, P 데프 (en_msg, 페이지, 키, Q) 해독 : dr_msg = [] H = 전력 (p, 키, Q) 에 대한 I 의 범위 (0, 렌 (en_msg)) : dr_msg.append (CHR (INT (en_msg [I] / H))) 반환 dr_msg # 드라이버 코드 데프 주 () : MSG = ' 암호화 ' 인쇄 ( " 원본 메시지 : " , MSG) Q = random.randint (영역 (10, 20), 쉘 (10, 50 )) g = random.randint (2 , Q) 키 = gen_key (Q) # 수신기 용 개인 키 H = 힘 (g, 키, Q) 출력 ( " g 사용 : " , g) 인쇄 ( " g ^ 사용한 : " , H) en_msg, P = 암호화 (MSG, Q, H, g) dr_msg = 복호화 (en_msg, P, 키, Q) dmsg = '' .join (dr_msg) 인쇄 ( " 해독 메시지 : " , dmsg); 경우 __name__ == ' __main__ ' : 본관()
샘플 출력 :
원본 메시지 : 암호화 g 사용 : 5860696954522417707188952371547944035333315907890 사용 g ^ A : 4711309755639364289552454834506215144653958055252 사용 g ^ K : 12475188089503227615789015740709091911412567126782 사용 G는 ^ AK : 39448787632167136161153337226654906357756740068295 해독 메시지 : 암호화
암호화 시스템에서, 원래의 메시지 M 에 의해 G AK는 승산 이 숨길 . 상기 마스크를 제거하기 위해 G K된다 단서의 형태로 주어진다 . 누군가가 알고하지 않는 을 , 그는 검색 할 수 없습니다 수를 . 루프 그룹 이산 대수를 찾기 어렵습니다, 오직 G 알고 와 G K는 G 계산하기에 충분 AK를 .