램포트 서명
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
램포트 서명은 일방향 함수를 기반으로 작동하는 디지털 서명 방식이다. 개인키로 메시지에 대한 서명을 생성하고 공개키로 서명의 유효성을 검증한다. 키 생성 과정은 난수 생성, 해시 함수 적용을 통해 이루어지며, 메시지 서명 시 메시지 해시 값의 각 비트에 따라 개인키 쌍 중 하나를 선택한다. 서명 검증은 메시지 해시 값과 공개키를 사용하여 수행된다. 램포트 서명은 일회용 서명으로, 개인키 재사용 시 보안이 취약해진다. 윈터니츠 서명, 머클 서명 방식 등의 변형을 통해 키와 서명 크기를 줄이거나 여러 메시지에 대한 서명을 검증하는 방식으로 최적화될 수 있다.
더 읽어볼만한 페이지
- 공개 키 암호 - 공개 키 기반 구조
공개 키 기반 구조(PKI)는 공개 키 암호화를 기반으로 안전한 통신과 개체 식별을 가능하게 하는 기술로서, 디지털 인증서를 통해 공개 키를 특정 개체에 연결하고 인증서를 관리하며, 인증 기관(CA), 등록 기관(RA) 등 다양한 구성 요소로 이루어져 인증서 발급, 관리, 배포, 사용 및 폐기와 관련된 역할, 정책, 하드웨어, 소프트웨어 및 절차의 집합을 포함한다. - 공개 키 암호 - DNSSEC
DNSSEC는 DNS의 보안 취약점을 개선하기 위해 도메인 정보에 디지털 서명을 추가하여 응답 레코드의 무결성을 보장하고 DNS 위장 공격을 막는 기술로, RRSIG, DNSKEY 등 다양한 리소스 레코드 유형을 사용하여 인증 체인을 구성하며 공개 키 암호 방식을 활용한다.
램포트 서명 | |
---|---|
개요 | |
유형 | 디지털 서명 |
발명가 | 레스리 램포트 |
발표 년도 | 1979년 |
보안 | |
보안 유형 | 일회성 서명 |
양자 컴퓨터에 대한 보안 | 양자 내성 암호 |
세부 사항 | |
기반 | 암호 해시 함수 |
공개 키 크기 | 서명 당 해시 크기의 k 배 (k는 메시지의 비트 수) |
서명 크기 | 해시 크기의 k 배 (k는 메시지의 비트 수) |
용도 | 더 큰 디지털 서명 체계의 구성 요소 |
2. 역사
램포트 서명은 일방향 함수를 기반으로 작동한다. 서명자는 개인키를 사용하여 메시지에 대한 서명을 생성하고, 검증자는 공개키를 사용하여 서명의 유효성을 확인한다.3. 작동 원리
== 키 생성 ==
램포트 서명의 키 생성 과정은 다음과 같다.
먼저, 서명자는 난수 생성기를 사용하여 256쌍의 난수를 생성한다. 각 쌍은 256비트 길이를 가진다. 이 난수 쌍들이 개인키가 된다. 개인키는 총 2 × 256 × 256 비트 = 128 키비트이다.
그 후, 각 개인키 쌍에 대해 해시 함수를 적용하여 256쌍의 해시 값을 계산한다. 이 해시 값들이 공개키가 된다. 공개키는 총 512개의 256 비트 해시값, 즉 128 키비트로 구성된다.
개인키는 와 같이 표현될수 있으며, 공개키는 와 같이 표현할수 있다. 여기서 z값은 y값에 해쉬 함수''f''를 적용하여 계산한다. 즉, 및 이다.
공개 키는 다른 사람들에게 알려져 검증에 사용된다.
== 메시지 서명 ==
램포트 서명에서 메시지 서명은 우선 서명할 메시지에 해시 함수를 적용하여 256비트(또는 k비트)의 해시 값을 얻는 것에서 시작한다.[2] 이 해시 값의 각 비트에 따라 개인키 쌍 중 하나의 난수를 선택한다. 예를 들어, 해시 값의 비트가 0이면 해당 개인키 쌍의 첫 번째 난수를 선택하고, 1이면 두 번째 난수를 선택한다.[2]
이러한 방식으로 메시지 해시 값의 256개(또는 k개) 비트에 대해 각각 대응하는 난수를 개인키 쌍에서 선택하여 서명을 생성한다. 이렇게 생성된 256개의 난수(각각은 256비트)가 앨리스의 서명이 되며, 앨리스는 이 서명을 메시지와 함께 공개한다. 서명의 총 크기는 256 × 256비트 = 64 KiB가 된다.[2]
서명 과정에서 사용된 앨리스의 개인키는 한 번 사용된 후에는 절대로 다시 사용되어서는 안 된다. 앨리스가 서명에 사용하지 않은 나머지 256개의 난수는 공개되거나 사용되지 않도록 파기해야 한다. 그렇지 않으면 개인키를 재사용할 때마다 보안 수준이 감소하여 위조 서명이 생성될 위험이 있다.[2]
일방향 함수로서 출력이 256비트인 해시 함수 hash()를 사용한다고 가정하면, 메시지(혹은 그 해시 값)는 256비트이며, 각 비트에 대해 난수 쌍 이 서명 키로 선택된다. 메시지의 번째 비트가 0이면 을 서명에 넣고, 1이면 을 서명에 넣는다. 예를 들어, 메시지가 이었다면, 다음과 같이 서명이 구성된다.
최종 서명은 가 되며, 크기는 256×256 bits = 64 Kibit이다.
== 서명 검증 ==
밥은 앨리스의 서명을 확인하기 위해, 먼저 메시지 M의 해시 값(256 비트)을 구한다. 그런 다음 이 해시 값을 이용하여 앨리스의 공개키에서 256개의 값을 선택하는데, 이는 앨리스가 서명 과정에서 개인키를 이용해 서명 값을 생성할 때 사용한 방법과 동일하다. 즉, 메시지 M의 해시 값 첫 번째 비트가 0이면 앨리스의 첫 번째 공개키 쌍의 첫 번째 값을 사용하는 방식이다.
이후, 밥은 앨리스의 메시지와 함께 공개되어 있는 서명 값 256개의 해시 값을 각각 구한다. 만약 이렇게 구한 256개의 해시 값이 앨리스의 공개키 쌍에서 고른 값과 정확히 일치한다면 서명은 올바른 것이다. 그렇지 않다면 서명은 잘못된 것이다.
앨리스가 메시지 서명을 공개하기 전에는 다른 어떤 사람도 개인 키에 있는 2×256개의 난수를 알지 못한다. 따라서, 다른 사람은 서명을 위한 적절한 256개의 난수 목록을 만들 수 없다. 앨리스가 서명을 공개한 후에도, 다른 사람들은 나머지 256개의 난수를 여전히 알지 못하므로 다른 메시지 해시에 맞는 서명을 생성할 수 없다.
검증자는 메시지 ${\displaystyle m=m_{1}\ldots m_{k}}$와 서명 ${\displaystyle (s_{1},\ldots ,s_{k})}$을 가지고 모든 ${\displaystyle 1\leq i\leq k}$에 대해 ${\displaystyle f(s_{i})=z_{i,m_{i}}}$가 성립하는지 확인하고, 성립하면 서명을 수락한다.
일방향 함수로서, 출력이 256비트인 해시 함수 hash()를 사용한다고 가정할 때, 검증자는 256비트 메시지와 256개의 ${\displaystyle s_{i}}$로 구성된 서명을 얻는다. 검증 키는 256개의 해시 값 쌍 ${\displaystyle (z_{i,0},z_{i,1})}$로 구성된다. 여기서 서명 내 각 ${\displaystyle s_{i}}$의 해시 값을 계산하고, 메시지의 ${\displaystyle i}$번째 비트가 0이면 ${\displaystyle z_{i,0}}$과 해시 값이 같은지, 1이면 ${\displaystyle z_{i,1}}$과 해시 값이 같은지 확인한다.
예를 들어,
${\displaystyle \vdots }$
를 확인한다. 모두 성립하면 서명이 올바른 것으로 간주한다.
3. 1. 키 생성
램포트 서명의 키 생성 과정은 다음과 같다.
먼저, 서명자는 난수 생성기를 사용하여 256쌍의 난수를 생성한다. 각 쌍은 256비트 길이를 가진다. 이 난수 쌍들이 개인키가 된다. 개인키는 총 2 × 256 × 256 비트 = 128 키비트이다.
그 후, 각 개인키 쌍에 대해 해시 함수를 적용하여 256쌍의 해시 값을 계산한다. 이 해시 값들이 공개키가 된다. 공개키는 총 512개의 256 비트 해시값, 즉 128 키비트로 구성된다.
개인키는 와 같이 표현될수 있으며, 공개키는 와 같이 표현할수 있다. 여기서 z값은 y값에 해쉬 함수''f''를 적용하여 계산한다. 즉, 및 이다.
공개 키는 다른 사람들에게 알려져 검증에 사용된다.
3. 2. 메시지 서명
램포트 서명에서 메시지 서명은 우선 서명할 메시지에 해시 함수를 적용하여 256비트(또는 k비트)의 해시 값을 얻는 것에서 시작한다.[2] 이 해시 값의 각 비트에 따라 개인키 쌍 중 하나의 난수를 선택한다. 예를 들어, 해시 값의 비트가 0이면 해당 개인키 쌍의 첫 번째 난수를 선택하고, 1이면 두 번째 난수를 선택한다.[2]
이러한 방식으로 메시지 해시 값의 256개(또는 k개) 비트에 대해 각각 대응하는 난수를 개인키 쌍에서 선택하여 서명을 생성한다. 이렇게 생성된 256개의 난수(각각은 256비트)가 앨리스의 서명이 되며, 앨리스는 이 서명을 메시지와 함께 공개한다. 서명의 총 크기는 256 × 256비트 = 64 KiB가 된다.[2]
서명 과정에서 사용된 앨리스의 개인키는 한 번 사용된 후에는 절대로 다시 사용되어서는 안 된다. 앨리스가 서명에 사용하지 않은 나머지 256개의 난수는 공개되거나 사용되지 않도록 파기해야 한다. 그렇지 않으면 개인키를 재사용할 때마다 보안 수준이 감소하여 위조 서명이 생성될 위험이 있다.[2]
일방향 함수로서 출력이 256비트인 해시 함수 hash()를 사용한다고 가정하면, 메시지(혹은 그 해시 값)는 256비트이며, 각 비트에 대해 난수 쌍 이 서명 키로 선택된다. 메시지의 번째 비트가 0이면 을 서명에 넣고, 1이면 을 서명에 넣는다. 예를 들어, 메시지가 이었다면, 다음과 같이 서명이 구성된다.
최종 서명은 가 되며, 크기는 256×256 bits = 64 Kibit이다.
3. 3. 서명 검증
밥(Bob)은 앨리스(Alice)의 서명을 확인하기 위해, 먼저 메시지 M의 해시 값(256 비트)을 구한다. 그런 다음 이 해시 값을 이용하여 앨리스의 공개키에서 256개의 값을 선택하는데, 이는 앨리스가 서명 과정에서 개인키를 이용해 서명 값을 생성할 때 사용한 방법과 동일하다. 즉, 메시지 M의 해시 값 첫 번째 비트가 0이면 앨리스의 첫 번째 공개키 쌍의 첫 번째 값을 사용하는 방식이다.
이후, 밥은 앨리스의 메시지와 함께 공개되어 있는 서명 값 256개의 해시 값을 각각 구한다. 만약 이렇게 구한 256개의 해시 값이 앨리스의 공개키 쌍에서 고른 값과 정확히 일치한다면 서명은 올바른 것이다. 그렇지 않다면 서명은 잘못된 것이다.
앨리스가 메시지 서명을 공개하기 전에는 다른 어떤 사람도 개인 키에 있는 2×256개의 난수를 알지 못한다. 따라서, 다른 사람은 서명을 위한 적절한 256개의 난수 목록을 만들 수 없다. 앨리스가 서명을 공개한 후에도, 다른 사람들은 나머지 256개의 난수를 여전히 알지 못하므로 다른 메시지 해시에 맞는 서명을 생성할 수 없다.
검증자는 메시지 ${\displaystyle m=m_{1}\ldots m_{k}}$와 서명 ${\displaystyle (s_{1},\ldots ,s_{k})}$을 가지고 모든 ${\displaystyle 1\leq i\leq k}$에 대해 ${\displaystyle f(s_{i})=z_{i,m_{i}}}$가 성립하는지 확인하고, 성립하면 서명을 수락한다.
일방향 함수로서, 출력이 256비트인 해시 함수 hash()를 사용한다고 가정할 때, 검증자는 256비트 메시지와 256개의 ${\displaystyle s_{i}}$로 구성된 서명을 얻는다. 검증 키는 256개의 해시 값 쌍 ${\displaystyle (z_{i,0},z_{i,1})}$로 구성된다. 여기서 서명 내 각 ${\displaystyle s_{i}}$의 해시 값을 계산하고, 메시지의 ${\displaystyle i}$번째 비트가 0이면 ${\displaystyle z_{i,0}}$과 해시 값이 같은지, 1이면 ${\displaystyle z_{i,1}}$과 해시 값이 같은지 확인한다.
예를 들어,
${\displaystyle \vdots }$
를 확인한다. 모두 성립하면 서명이 올바른 것으로 간주한다.
4. 수학적 설명
를 양의 정수, 를 메시지 집합, 를 일방향 함수로 정의한다.
서명자는 이고 에 대해, 를 무작위로 선택하고 를 계산한다.
개인 키 는 개의 값 로 구성된다. 공개 키는 개의 값 로 구성된다.
메시지 의 서명은 이다.
검증자는 모든 에 대해 가 성립하는지 확인하여 서명을 검증한다.
메시지를 위조하기 위해 이브는 일방향 함수 를 반전시켜야 하는데, 이는 어렵다고 가정한다.
서명될 메시지는 고정된 길이( 비트)이다. 임의 길이의 메시지에 서명하고 싶은 경우에는 먼저 해시 길이가 비트인 암호학적으로 안전한 해시 함수로 해시 값을 계산하고, 그 해시 값에 대해 서명 절차를 거쳐 서명할 수 있다.
5. 보안성
램포트 서명의 보안성은 일방향 해시 함수의 안전성과 출력 길이에 기반한다.[3][7]
n비트 메시지 다이제스트를 생성하는 해시 함수의 경우, 이상적인 사전 이미지 및 제2사전 이미지 저항성은 고전적인 컴퓨팅 모델에서 단일 해시 함수 호출 시 약 2''n''번의 연산을 필요로 한다.[3] 그로버 알고리즘에 따르면, 이상적인 해시 함수의 단일 호출에 대한 사전 이미지 충돌을 찾는 것은 양자 컴퓨팅 모델에서 O(2''n''/2) 연산의 상한이다.[3] 램포트 서명에서 공개 키와 서명의 각 비트는 해시 함수에 대한 단일 호출만 필요한 짧은 메시지를 기반으로 한다.
각 개인 키 ''yi,j'' 및 해당 ''zi,j'' 공개 키 쌍에 대해, 입력 길이에 대한 사전 이미지 공격을 수행하는 것이 출력 길이에 대한 사전 이미지 공격을 수행하는 것보다 빠르지 않도록 개인 키 길이를 선택해야 한다. 예를 들어, 각 개인 키 ''yi,j'' 요소의 길이가 16비트에 불과하다면, 메시지 다이제스트 길이에 관계없이 216번의 연산으로 모든 216개의 가능한 개인 키 조합을 검색하여 출력과 일치하는 것을 찾는 것은 가능하다.[3][7] 따라서 균형 잡힌 시스템 설계는 두 길이 모두 대략 동일하게 유지되도록 한다.
그로버 알고리즘을 기반으로 하는 양자 안전 시스템에서 공개 키 요소 ''zi,j'', 개인 키 요소 ''yi,j'' 및 서명 요소 ''si,j''의 길이는 시스템의 보안 등급보다 2배 이상 커야 한다.[3][7] 즉, 80비트 보안 시스템은 160비트 이상의 요소 길이를 사용하며, 128비트 보안 시스템은 256비트 이상의 요소 길이를 사용한다.
그러나 위의 이상적인 작업 추정치는 이상적인(완벽한) 해시 함수를 가정하고 한 번에 단일 사전 이미지만을 대상으로 하는 공격으로 제한되므로 주의해야 한다. 기존 컴퓨팅 모델에서는 23''n''/5개의 사전 이미지를 검색하면 사전 이미지당 전체 비용이 2''n''/2에서 22''n''/5로 감소하는 것으로 알려져 있다.[3][7] 여러 메시지 다이제스트의 모음을 고려하여 최적의 요소 크기를 선택하는 것은 아직 해결되지 않은 문제이다. 512비트 요소 및 SHA-512와 같은 더 큰 요소 크기와 더 강력한 해시 함수를 선택하면 이러한 미지수를 관리하기 위한 더 큰 보안 마진을 보장한다.[3][7]
램포트 서명은 일회용 서명이므로, 개인키를 재사용하면 보안이 취약해진다. 개인키의 일부가 노출되면 다른 메시지에 대한 위조 서명이 가능해진다.
6. 최적화 및 변형
6. 1. 짧은 개인키
개인 키의 모든 임의 숫자를 생성하고 저장하는 대신, 충분한 크기의 단일 키를 저장할 수 있다. (일반적으로 개인 키의 임의 숫자 중 하나의 크기와 같다.) 그런 다음 단일 키를 암호학적으로 안전한 의사 난수 생성기(CSPRNG)의 시드로 사용하여 필요할 때 개인 키의 모든 임의 숫자를 생성할 수 있다. 암호학적으로 안전한 해시(또는 적어도 출력이 시드와 XOR되지 않는 해시)는 메시지에 서명하면 개인 키에서 추가 임의 값이 공개되므로 CSPRNG 대신 사용할 수 없다.마찬가지로 단일 키를 CSPRNG과 함께 사용하여 많은 램포트 키를 생성할 수 있다. 이 경우 양자 후 보안 임의 접근 CSPRNG을 사용하는 것이 좋다. 특히 BBS와 같은 고전적인 CSPRNG는 사용해서는 안 된다. 비밀 키의 모든 난수는 충분한 길이(일반적으로 비밀 키 내의 하나의 난수와 동일한 길이)의 시드와 암호학적 의사 난수 생성기로부터 생성할 수 있다. 따라서 시드만을 비밀 키로 저장해 둘 수 있다. 난수는 필요할 때 시드로부터 다시 생성하면 된다.
마찬가지로 하나의 시드와 의사 난수 생성기를 사용하여 다수의 키 페어(공개 키와 비밀 키)를 생성할 수도 있다. 이 경우 랜덤 액세스 가능한 의사 난수 생성기를 사용해야 한다.
양자 컴퓨터 내성을 고려한다면, BBS와 같은 고전적인 의사 난수 생성기가 아닌, 양자 내성이 있는 것을 사용해야 한다.
6. 2. 짧은 공개키
해시 목록이나 암호학적 누산기를 사용하여 공개키의 크기를 줄일 수 있다.[4][8] 램포트 서명은 해시 목록과 결합하여 공개 키의 모든 해시 대신 단일 최상위 해시만 게시할 수 있도록 한다. 즉, 값 대신 단일 최상위 해시에 대해 검증하려면 서명에 임의의 숫자와 공개 키의 해시 목록에서 사용되지 않은 해시를 포함해야 하며, 서명 크기가 약 두 배가 된다. 즉, 모든 에 대한 값 를 포함해야 한다. 해시 목록 대신 암호학적 누산기를 사용하면 사용하지 않은 해시를 서명에 포함할 필요가 없다.[4]6. 3. 윈터니츠 서명 (Winternitz signature)
윈터니츠 서명은 키와 서명의 크기를 줄이는 대신 계산량을 늘리는 방식이다.[5] 메시지를 청크 단위로 나누어 처리하여 효율성을 높인다.[9][10]메시지를 고정 길이의 청크로 분할하고, 청크마다 난수 및 다중 해시 값을 1개씩 준비한다. 청크를 비트라고 하면, 키의 크기는 오리지널 램포트 서명의 키 크기에 비해 정도로 작아지고, 서명의 크기도 정도로 작아진다. 서명 생성 및 검증에는 청크마다 다중 해시를 계산해야 하며, 비용은 약 배가 된다.[9]
암호학적으로 안전한 해시 함수는 CSPRNG(암호학적 보안 의사 난수 생성기)의 요구 사항을 대체할 수 있다.[5] 해시 목록을 사용하면 서명 크기를 두 배로 늘리는 대신 공개 키를 단일 값으로 줄일 수도 있다.[9]
6. 4. 머클 서명 방식 (Merkle signature scheme)
머클 서명 방식은 여러 개의 램포트 공개키를 해시 트리 형태로 구성하여 하나의 최상위 해시 값만으로 여러 메시지에 대한 서명을 검증할 수 있게 한다.[9] 각 램포트 공개 키는 단일 메시지만 서명하는 데 사용될수 있는데, 여러 메시지에 서명하려면 많은 키를 게시해야 한다.[9] 그러나 이러한 공개 키에 해시 트리를 사용하면, 해시 트리의 최상위 해시를 게시 할 수 있다.[9] 이렇게 하면 서명에 해시 트리의 분기가 포함되어야 하므로 결과 서명의 크기가 커지지만, 나중에 많은 수의 서명을 검증하는 데 사용할 수 있는 단일 해시를 게시할 수 있게 된다.[9]7. 한국 관련 내용
8. 응용 분야
9. 한계
참조
[1]
간행물
Constructing Digital Signatures from a One Way Function
https://www.microsof[...]
1979-10
[2]
웹사이트
Lamport signature: How many signatures are needed to forge a signature?
https://crypto.stack[...]
[3]
문서
Bart Preneel, "Design Principles for Iterated Hash Functions Revised"
http://csrc.nist.gov[...]
[4]
웹사이트
Can one use a Cryptographic Accumulator to efficiently store Lamport public keys without the need of a Merkle Tree?
https://crypto.stack[...]
[5]
웹사이트
Winternitz one-time signature scheme
https://gist.github.[...]
[6]
간행물
Constructing Digital Signatures from a One Way Function
https://www.microsof[...]
1979-10
[7]
문서
Bart Preneel, "Design Principles for Iterated Hash Functions Revised"
http://csrc.nist.gov[...]
[8]
웹사이트
Can one use a Cryptographic Accumulator to efficiently store Lamport public keys without the need of a Merkle Tree?
https://crypto.stack[...]
2023-08-20
[9]
웹사이트
A Certificated Digital Signature
https://link.springe[...]
2023-08-20
[10]
웹사이트
Winternitz one-time signature scheme
https://gist.github.[...]
2023-08-20
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com