6 분 소요

대칭 키 암호 방식과 비대칭 키 암호 방식


블록체인에서의 암호는 대표적으로 ‘보안’을 위해서 사용되고, 기밀성, 무결성, 인증, 부인 방지를 위해 사용된다. 해당 기능은 크게 대칭 키 암호 방식과 비대칭 키 암호방식, 그리고 해시 함수를 사용하여 구현 한다.

대칭 키 암호 방식

대칭 키는 암호화를 할 때 키와 복호화를 할 때의 키가 같은 것을 대칭 키라고 하며, 여러 사용자 사이에 공유된 하나의 키를 기반으로 한다.

대칭 키 암호 방식에는 블록 암호 방식과 스트림 암호 방식이 있으며, 블록 암호 방식은 데이터를 미리 정해둔 사이즈로 잘라, 청크 단위로 그룹화하고, 각 블록을 개인 키로 암호화하는 것을 말하고, 스트림 암호 방식은 원본 데이터의 길이와 같은키로 키 스트림을 생성하고 원본 데이터와 키 스트림을 XOR 연산하는 것으로 이루어진다.

img1

그러나 대칭 키 암호 방식을 사용하게 되면, 위 그림과 같이 키 탈취에 대한 문제가 발생하고, 이에 키 관리가 어렵다는 문제가 있다.

비대칭 키 암호 방식

비대칭 키 암호 방식은 대칭 키 암호 방식의 키 관리 문제를 해결하기 위한 방안으로 고안된 개념으로, 단일 키가 아닌 공개 키와 개인 키의 개념을 사용하며, 공개 키 암호 방식과 개인 키 암호 방식(공개 키 서명 방식)이 있다.

공개 키 암호 방식


img2

위 그림과 같이 공개키는 전송자가 정보를 암호화하는데 사용하며, 개인 키는 수신자가 데이터를 복호화하는데 사용한다. 공개 키로 암호화한 데이터는 개인키로 복호화할 수 있어야 하기 때문에, 두 키는 수학적으로 연결되어 있으며, 개인 키는 수신자만 보관하고 있어, 전송할 필요가 없기 때문에 키 배송 문제를 해결하여 컴퓨터 보안을 강화하며, 데이터의 무결성을 확인하는 데 사용할 수 있다. 그러나 수학적 계산이 매우 복잡하기에 대량의 데이터를 처리할 경우 오버헤드가 발생하여 속도 측면에서 문제가 생기며, 키 배송에 대한 문제는 해결했지만, 키 보관에 대한 문제는 여전하다.

개인 키 암호 방식


공개 키 암호 방식은 공개 키로 데이터를 암호화 했던 것과 달리, 개인 키 암호 방식은 개인키로 암호화를 진행하고 공개키로 복호화를 한다. 이는 공개된 키가 복호화에 사용되기 때문에 데이터 보호보다 신원 확인 용도로 사용하며, 블록체인에서 전자서명에 사용된다.

대칭 키 암호와 비대칭 키 암호의 혼용

대칭 키 암호 방식

  • 장점
    • 간결, 네트워크나 CPU의 오버헤드가 적고 빠르게 작동한다.
  • 단점
    • 키 배송, 즉 키 탈취에 대한 문제가 있다.

비대칭 키 암호 방식

  • 장점
    • 대칭 키 암호 방식의 키 탈취에 대한 문제점을 해결했다.
  • 단점
    • 공개 키와 개인 키의 연산으로 연산 속도가 느려 대용량 데이터 암호화에 부적합하다.

-> 웹 프로토콜은 대칭키 암호화 방식과 공개키 암호화 방식을 혼합하는 디지털 봉투 기술을 사용한다.

디지털 봉투


디지털 봉투란 대칭키를 사용해 데이터를 암호화한 후, 암호화에 사용한 대칭키를 비대칭키로 암호화하여 안전하게 전송하는 것으로, 대칭키 암호 방식을 통해 데이터를 빠르게 암호화시킬 수 있고, 비대칭키 암호화 방식을 통해 작은 데이터인 키를 암호화함으로써 키 탈취의 문제를 해결했다.

  • Ex. TLS(Transport Layer Security)

대칭키 암호 방식과 공개키 암호 방식의 비교

  대칭키 암호화 알고리즘 공개키 암호화 알고리즘
키의 길이 보안 수준에 따라 128비트나 256비트이다. 공개키와 개인키가 수학적으로 한 쌍을 이루어야 하기 때문에 패턴 존재, 패턴이 파악되면 안되기 때문에 대칭키 암호화 알고리즘과 비슷한보안 수준을 내려면 2048비트이다.
연산 속도 블록 암호화나 스트림 암호화 모두 연산이 단순하기 때문에 빠르다. 복잡한 수학적 연산을 수행하기 때문에, 비교적 속도가 느리며, 훨씬 더 많은 연산 능력이 필요하다.
사용 연산 속도가 빠르기 때문에 대용량 데이터 전송에 사용된다. 연산 속도가 느리기 때문에 인증, 서명에 사용된다.
보안 개인키를 사용하고 공유해야 하기 때문에 키 탈취 위협이 존재한다. 공개키로 암호화하고 개인키로 복호화하기 때문에 키 전송이 필요없어 탈취 위협이 적다.
알고리즘 RC4, AES, DES, 3DES RSA, 디피-헬먼, ECC

비대칭키 암호 방식 알고리즘

RSA 암호 방식(소인수분해)


RSA 암호 방식은 두 개의 소수를 곱하여 얻어낸 계수를 사용해 공개 키와 개인 키를 생성하는 방식으로, 아주 큰 수는 소인수분해 하는 것이 어렵다는 것에 기반을 둔 방식이다.

  • A * B = C
    • 개인 키 * 개인 키 = 공개 키로 개인 키로 공개 키를 유추할 수 있다.
    • 그러나 공개 키를 소인수 분해하려면 엄청난 시간이 걸리게 되고 개인키를 유추하기 매우 어렵다.
    • 공개 키를 전달하여 암호화를 하고, 개인 키를 사용하여 복호화를 할 수 있다.

타원 곡선 알고리즘


타원 곡선 알고리즘은 비트코인의 비대칭키 알고리즘으로 유명하며, RSA보다 짧은 키의 길이와, 빠른 연산 속도를 가지지만, 동일한 보안 수준을 가지고 있다.

img3

  • y^2=x^3+ax+b
  • 경우의 수 10^77
  • A(임의의 점, 개인키) * B(이동 횟수, 개인 키) = C(결괏값, 공개 키)
    • 비트코인의 개인 키에 해당하는 B인 이동 횟수는 2^256 경우의 수 안에서 무작위로 생성되기 때문에 개인 키를 예측하는 것은 사실상 불가하다.
    • 2진수로 표현하게 되면 매우 길어지기 때문에 보통 16진수 64자리로 표현하게 되는데, 이는 블록체인에서 흔하게 볼 수 있는 문자열이다.

    • C는 공개키로, 지갑 주소로 활용하지만, 보안과 길이 측면에서 한 번 더 해시한 값을 활용한다.

디지털 서명


디지털 서명은 메시지나 디지털 문서의 진위성과 무결성을 검증하는 데 사용하는 수학적 메커니즘으로, 디지털 통신에서 변조 및 사칭 문제를 해결하고, 전자 문서, 거래, 메시지의 출처, 신원 및 상태에 대한 보증을 제공하며, 블록체인에서 트랜잭션을 생성하여 서명하고 승인하는 데 사용된다.

img4

디지털 서명은

  1. 해싱
  2. 서명
  3. 검증

으로 세 단계로 나뉘며 설명은 다음과 같다.

해싱

원본 데이터를 해싱하고, 동일한 길이의 해시값을 가지게 된다. 이 과정이 필수적이지는 않지만, 고정된 길이의 값을 비교하는 것이 무결성을 검증하는 데 훨씬 효율적이기 때문에 사용한다.

서명

비대칭 키 암호화 방식을 사용해 해싱된 데이터에 서명을 한다. 일반적으로 송신자의 개인키로 해시값을 암호화하며, 이 암호화된 결과값이 바로 디지털 서명이다. 서명이 완료되면, 원본 데이터와 디지털 서명, 송신자의 공개 키를 함께 전송한다.

검증

수신자는 송신자의 공개 키를 가지고 디지털 서명을 복호화하여 원본 데이터의 해쉬값을 구하고, 원본 데이터를 해싱하여 원본 데이터의 해쉬값을 구한다. 구한 두 해시값을 비교하여 일치한다면, 송신자를 검증할 수 있고, 데이터에 대한 무결성도 검증된다.

디지털 서명의 특징

  • 데이터 무결성
    • 원본 데이터의 해쉬값과 디지털 서명의 복호화 값(결국, 원본 데이터의 해쉬값)을 비교하여 데이터 위변조 여부를 판단 가능하다.
  • 진위성
    • 송신자의 개인 키가 안전하게 보관되었다는 전제 하에, 수신자는 디지털 서명이 송신자의 공개키로 정상적으로 복호화해서 해쉬값이 일치하다면 송신자에 의해 생성되었음을 확인할 수 있다.
  • 부인 방지
    • 송신자의 개인 키가 안전하게 보관되었다는 전제 하에, 서명이 생성되고 나면 이 서명이 송신자에 의해 서명되었다는 사실을 부정할 수 없다.

디지털 서명 시스템의 필요 조건

  • 알고리즘
    • 신뢰할 수 있고, 널리 사용되어 그 안전성이 입증된 해시 함수와 암호화 알고리즘을 사용해야 한다.
  • 구현
    • 디지털 서명은 데이터의 무결성과 진위성과 직결되기 때문에 결점 없는 시스템을 구현해야 한다.
  • 개인 키
    • 개인 키가 유출되거나 손상될 경우, 진위성과 부인 방지 속성이 무효화되기 때문에 중요하며, 특히 암호화폐에서 개인키를 분실할 경우, 재정적 손실로 이어지기도 한다.

해시 함수


해시 함수는 해시된 값이 원본 값을 보존하고 있지 않기 때문에 단방향 암호라고 부르며, 해싱은 다양한 크기의 입력값을 고정된 크기의 출력값으로 생성해 내는 과정을 의미한다. 이러한 특성을 통해 블록체인 및 다양한 분산 시스템에 데이터 무결성과 보안을 보장하는 데 사용된다.

블록체인에서 해싱의 역할

블록체인에서 특히, 암호화폐 프로토콜에서 해싱은 사용자에게 익명성을 보장하고, 트랜잭션을 하나로 연결 및 압축하며, 블록을 연결하는 동시에 그 무결성을 보장하는 역할(머클 트리)을 한다.

해시값을 사용해 익명성 보장


공개키를 해싱한 값을 지갑 주소로 사용하여 거래를 익명화한다. 트랜잭션 기록에는 해시값으로 암호화된 지갑 주소와 송금 및 잔액을 확인할 뿐, 해당 지갑의 주인에 대한 정보는 기록되지 않는다.

무결성 검증


머클 트리

해시값을 사용해 채굴 노드를 정함


비트코인에서는 PoW(작업 증명) 방식을 사용해 어떤 노드가 블록을 만들지 결정하는데, 이는 특정 조건을 만족하는 해쉬값을 찾기 위해 입력값인 논스를 찾는 방식이다.

암호 해시 함수

블록체인에서 사용되는 해시 함수는 단방향이기 때문에, 원본값을 찾기 매우 어렵지만, 고정된 길이의 출력값을 출력하는 특징에서 서로 다른 입력값을 해시 함수에 넣었는데 동일한 출력값을 출력하는 ‘‘해시 충돌”이 발생할 수 있다.

이에 암호 해시 함수는

  • 충돌 저항성
  • 역상 저항성
  • 제2 역상 저항성

을 가져야 하며, 설명은 다음과 같다.

충돌 저항성


충돌 저항성은 어떤 해시 함수가 충돌하는 서로 다른 두 입력값을 가졌는지 발견되지 않은 상태를 의미한다.

역상 저항성


역상 저항성은 어떤 해시 함수가 특정한 값을 출력하는 입력값을 찾을 확률이 매우 낮을 경우를 의미한다.

제2 역상 저항성


제2 역상 저항성은 충돌 저항성과 역상 저항성이 복합적으로 작용한 경우로, 입력값의 해시값과 동일한 해시값을 내는 입력값을 누군가 알고 있지 않은 경우이다.

+ 다양한 암호화 기술


SHA

SHA는 Secure Hash Algorithm의 약자로, 해시함수를 이용해 만든 해시 암호화 알고리즘의 모음이다. SHA의 목적은 일반적인 암호화 알고리즘과 다르게 데이터의 위변조가 불가능함을 보장하는 무결성에 초점을 두었으며, 실제 비트코인이나 이더리움에서 블록헤더, 디지털 서명, 공개 키에서는 데이터 무결성을 위해 SHA를 사용한다.

HMAC

HMAC(Hash-based Message Authentication Code)는 대칭 키 암호 방식을 사용하여 디지털 서명을 구현하며, 송신자와 수신자가 단일 키를 공유하고, 해당 단일 키와 원본 데이터를 해싱한 값과 원본 데이터를 함께 트랜잭션으로 보내 데이터 무결성을 증명한다.

PKI

PKI(Public Key Infrastructure, 공개 키 인프라)는 디지털 인증서와 공개 키를 생성, 관리, 배포, 사용, 저장 및 해지하는 데 필요한 일련의 하드웨어, 소프트웨어, 정책, 프로세스와 절차의 집합이며, 목적은 데이터를 안전하게 전송하기 위해, 시스템 및 리소스 접근 권한, 데이터 보호, 트랜잭션 무결성 및 진위성, 기밀성을 보장한다.

슈노르 서명

슈노르 서명에서는 여러 이해당사자가 하나의 메시지에 서명 하기를 원하는 경우, 키 집합을 사용하여 당사자의 공개키들을 결합하여 단일한 하나의 공개키를 구성하고, 단일 서명을 구성한다. 이를 검증 노드는 당사자들이 모두 메시지에 서명했는지 확인가능하며, 이러한 점은 개인 정보 보호에 유리하고, 블록에 들어가는 멀티시그 공개 키들과 서명 크기를 일반적인 블록 크기 정도로 줄이기 때문에 블록 공간을 매우 절약하고, 검증 속도를 빠르게 할 수 있다.

본 포스팅은 코드스테이츠 BEB 과정을 수강하며 작성한 글입니다.