대칭 키, 공개 키 암호법

kudos·2021년 5월 22일
0

네트워크

목록 보기
1/5

1. 디지털 암호

1) 키가 있는 암호

key : 기계에 설정해서 암호의 동작방식을 변경할 수 있는 큰 숫자로 된 값

디코딩 과정을 바르게 동작시키려면 올바른 키를 암호 기계에 입력할 필요가 있다. 암호 키는 하나의 암호 기계를 여러 가상 암호 기계의 집합처럼 만들어준다. 이 가상 암호 기계들은 서로 다른 키 값을 갖고 있기 때문에 제각각 다르게 동작한다.

2) 디지털 암호

기계 장치의 물리적인 금속 키나 다이얼 설정과는 달리, 디지털 키는 그냥 숫자에 불과하다. 이들 디지털 키 값은 인코딩과 디코딩 알고리즘에 대한 입력값이다. 코딩 알고리즘은 데이터 덩어리를 받아서 알고리즘과 키의 값에 근거하여 인코딩하거나 디코딩하는 함수이다.

평문 메시지 P, 인코딩 함수 E, 디지털 인코딩 키 e가 주어지면 부호화된 암호문 C를 생성할 수 있다. 그리고 암호문 C를 디코더 함수 D와 디코딩 키 d를 사용해서 원래의 평문 P로 디코딩할 수도 있다.

2. 대칭 키(Symmetric-Key) 암호법

1) 대칭 키 암호법이란

대칭 키 암호법에서는 인코딩을 할 때 사용하는 키와 디코딩을 할 때와 같다.(e = d) 그 키를 여기서는 k라고 부른다.

대칭 키 암호에서, 발송자와 수신자 모두 통신을 위해 비밀 키 k를 똑같이 공유할 필요가 있다. 발송자는 공유된 비밀 키를 메시지를 암호화하고 그 결과인 암호문을 수신자에게 발송하기 위해 사용한다. 수신자 역시 암호문을 받은 뒤 같은 키 k를 사용해 원래의 평문을 복원하기 위해 해독 함수를 적용한다.

2) 키 길이와 열거 공격

대부분의 경우, 인코딩 및 디코딩 알고리즘은 공개적으로 알려져 있으므로 키만이 유일한 비밀이다. 따라서 비밀 키가 누설되면 절대 안 된다.

무차별로 모든 키 값을 대입해보는 공격을 열거 공격이라고 한다. 가능한 키 값의 개수는 키가 몇 비트이며 얼마나 많은 키가 유효한지에 달려있다.

3) 공유 키 발급하기

대칭 키 암호의 단점 중 하나는 발송자와 수신자가 서로 대화하려면 둘 다 공유 키를 가져야 한다는 것이다. 대화 참여자의 각 쌍은 그들만의 개인 키를 가질 필요가 있다. 만약 N개의 노드가 있고 각 노드가 상대 N-1과 은밀하게 대화를 나눠야 한다면, 대략 총 N2N^{2}개의 비밀 키가 필요하다.

또한, 키를 발급하고 대화 참여자가 공유하는 과정에서 해킹에 노출될 수 있다는 점도 위험 요소가 될 수 있다.

3. 공개 키(Public-Key) 암호법

1) 공개 키 암호법이란

한 쌍의 호스트가 하나의 인코딩/디코딩 키를 사용하는 대신, 공개 키 암호 방식은 두 개의 비대칭 키를 사용한다. 하나는 호스트의 메시지를 인코딩하기 위한 것이며, 다른 하나는 그 호스트의 메시지를 디코딩하기 위한 것이다. 인코딩 키는 모두를 위해 공개되어 있지만, 디코딩 키는 호스트만 알고 있다.

노드 X는 자신의 인코딩 키 eXe^{X}를 공개적으로 배포할 수 있다. 이제 메시지를 노드 X에게 보내고자 하는 누구나 똑같고 잘 알려진 공개 키를 사용할 수 있다. 각 호스트마다 누구나 사용할 수 있는 인코딩 키가 할당되어 있기 때문에, 공개 키 암호 방식은 대칭 키의 쌍이 N2N^{2}으로 폭발적으로 증가하는 것을 피할 수 있다.

모든 사람이 X에게 보내는 메시지를 같은 키로 인코딩할 수 있지만, X를 제외한 누구도 그 메시지를 디코딩할 수 없다. 키의 분리는, 메시지의 인코딩은 누구나 할 수 있도록 해주는 동시에, 메시지를 디코딩하는 능력은 소유자에게만 부여한다.

2) 혼성 암호 체계

공개 키 암호 방식의 알고리즘은 계산이 느린 경향이 있다. 그래서 실제로는 대칭과 비대칭 방식을 섞은 것이 쓰인다. 예를 들어, 노드들 사이의 안전한 의사소통 채널을 수립할 때는 편리하게 공개 키 암호를 사용하고, 이렇게 만들어진 안전한 채널을 통해 임시의 무작위 대칭 키를 생성하고 교환하여 이후의 나머지 데이터를 암호화할 때는 빠른 대칭 키를 사용하는 방식이 흔히 쓰인다.

3) 암호화할 때는 항상 공개 키를 사용할까?

송신자 측에서 데이터를 개인 키로 암호화하고 공개 키를 같이 전달해서 수신자 측에서는 해당 공개 키로 데이터를 복호화하는 경우도 있다. 이는 데이터를 암호화하는 것보다 송신자의 신원을 보장하는 것이 중요할 때 이렇게 사용한다.

참고

HTTP Definite guide 14장
https://velog.io/@cchloe2311/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9-%EB%8C%80%EC%B9%AD%ED%82%A4-%EB%B9%84%EB%8C%80%EC%B9%AD%ED%82%A4

profile
kudos

0개의 댓글