플레이페어 암호 (Playfair cipher)란?

플레이페어 암호화는 영국의 물리학자 휘트스톤과 영국의 수학자 플레이페어가 함께 만든 함호화 방식입니다.

휘트스톤이 죽은다음 발표를 하게되어 이 암호화 방식은 플레이페어란 이름을 붙이게 되었습니다.


그럼 어떤 방식으로 암호화가 되는지 알아보겠습니다.

우선 플레이페어 암호화는 키테이블을 필요로 합니다.

키테이블은 5x5행렬로 구성된 알파벳테이블을 이용합니다.


<키테이블>

키테이블을 만드는 방법을 알아보도록 하겠습니다.

우선 우리는 키값을 받아야 합니다.

키값을 assasinator라고 예를 들어보겠습니다.

1. 키값의 중복된 글자를 제거 : assainator -> asintor

받은 키값을 위와같이 중복된 글자를 제거해주고 나면 asintor를 5x5테이블에 순서대로 넣습니다.

2. 중복제거된 키값 5x5 테이블에 삽입

 A

S

I

N

T

 O

R




 





 





 






삽입을 하고나니 테이블에 빈칸이 많이 보입니다!

그럼 이제 A~Z의 글자중 아직 사용되지 않은 글자를 순서대로 삽입해주는 것입니다.

이때 주의할점이 있습니다.

I/J를 같은 자리에 넣거나 Q/Z를 같은 자리에 넣어 주어야 합니다.

3. 나머지 알파벳 차례대로 테이블에 삽입

 A

S

I

N

T

 O

R

B

C

D

 E

F

G

H

J

 K

L

M

P

Q/Z

 U

V

W

X

Y


이제 키테이블이 완성되었습니다.

우리는 이것을 사용하여 문장을 암호화 할수 있습니다.


<암호화 규칙>

예시 문장을 이용해 설명하도록 하겠습니다.

예시문장 : BE CAREFUL FOR ASSASINATOR (암살자를 조심해!)

1. 문장을 2글자씩 쪼개기(한쌍의 문자가 같거나 마지막에 하나남은 문자에 X추가)

BE

CA 

RE 

FU 

LF 

OR 

AS 

SA 

SX 

SI 

NA 

TO 

RX 

 

 

 

 

 

 

 

 

 

 

 

 

 

문장을 2글자씩 나눴네요. 그런데 이상한 점이 보이시나요?

x란 글자가 추가된 부분을 볼수 있을 겁니다.

우리는 글자를 나눌때 SS와 같이 한쌍의 문자가 같거나 마지막에 하나남은 문자가 생겼을 경우 X를 추가하여 문자 쌍을 만들어야 합니다.

이 규칙을 잊으시면 안돼요!

규칙1. 암호화 하려는 두 문자가 서로다른 행과 다른 열에 존재할 경우

 A

S

I

N

T

 O

R

B

C

D

 E

F

G

H

J

 K

L

M

P

Q/Z

 U

V

W

X

Y

첫 2글자 BE를 예로 들어 보겠습니다.

B의 열을 기준으로 E와 같은 행이 되도록 해봅시다. B가 (1,2) E가(2,0)이니 두 글자가 만나는 위치로 가보면 G (2,2)가 되겠죠

E의 열을 기준으로 G와 같은 행이 되도록 해봅시다. G가 (2,0) B가(1,2)이니 두 글자가 만나는 위치로 가보면 O (0,1)이 되겠네요.

이처럼 서로의 글자가 만나는 위치에 글자로 치환을 해주는 겁니다.

BE->GO

규칙2. 두 문자가 같은 열에 있는 경우

 A

S

I

N

T

 O

R

B

C

D

 E

F

G

H

J

 K

L

M

P

Q/Z

 U

V

W

X

Y

LF로 예를 들어 보겠습니다.

같은 열에 있는경우는 1번규칙보다 훨씬 간단합니다.

그냥 한칸씩 밑으로 내려가면 되는 것이죠. 이때 주의해야할점이 있습니다. 한칸을 내려갔는데 아무것도 없다면 제일 위로 가야합니다.

LF->VL

규칙3. 두 문자가 같은 행에 있는 경우

 A

S

I

N

T

 O

R

B

C

D

 E

F

G

H

J

 K

L

M

P

Q/Z

 U

V

W

X

Y

OR을 예로 들어 보겠습니다.

같은 행에 있는경우는 한칸씩 오른쪽으로 이동합니다. 이때 규칙2와 마찬가지로 다음칸이 없다면 제일 왼쪽으로 가야합니다.

OR->RB

3가지 규칙을 다 확인해 보았습니다.

그럼이제 문장을 암호화 해보도록 하겠습니다.

BE

CA 

RE 

FU 

LF 

OR 

AS 

SA 

SX 

SI 

NA 

TO 

RX 

GO

NO 

FO

VE 

VL 

RB 

SI 

IS 

VN 

IN 

TS 

DA 

VC 

위와 같이 암호화에 성공했습니다.

GONOFOVEVLRBSIISNVINTSDAVC 이문장을 이해할수 있을까요?? 키테이블이 없다면 불가능할것입니다.


<복호화 규칙>

복호화 규칙은 암호화 규칙을 이해하셨다면 매우 간단합니다.

1. 우선 문장을 2글자씩 쪼갠다.(중복, 마지막글자 홀수일경우 X추가)

2. 규칙1은 달라지는 점이 없다.

3. 규칙2,3은 움직인 방향의 반대로 움직인다. (열은 위로, 행은 왼쪽으로)

이규칙을 지키며 다시 복호화 하면

BECAREFULFORASSASXSINATORX가 나오게 됩니다.

그럼 우리는 이문장에 X를 제거하고 BE CAREFUL FOR ASSASINATOR로 읽을 수 있게 되는 것이죠.

다음에는 C언어를 이용해 플레이페어 암호화를 구현해 보도록 하겠습니다.

링크 : C언어로 플레이페어 암호화 구현하기



+ Recent posts