암호화는 데이터 보안을 보장하기 위해 수학 함수를 적용하는 과학입니다.
많은 인기 영화와 TV 프로그램은 사람들에게 충분히 강력한 해커가 있는 한 어떤 시스템이라도 침입할 수 있다는 것을 암시합니다. 이러한 유형의 "할리우드 해킹"은 실제 시나리오가 아닙니다. 해커는 잠금 해제된 서버실, 추측하기 쉬운 비밀번호, 보호되지 않은 네트워크 포트 또는 내부에 설치된 "백도어"와 같이 시스템에서 노출된 취약점을 찾아내야 합니다. 무단 액세스.
시스템에 취약점이 없다고 결코 보장할 수 없다는 것은 사실이지만, 결국 시스템은 불완전한 인간에 의해 구축되므로 "모든 시스템이 손상될 수 있다"는 생각은 잘못된 것입니다. 1990년대 초반부터 우리는 암호화를 사용하는 해커로부터 완전히 면역되었습니다. 그러나 이 기술을 적용하면 해커가 이를 악용할 여지가 생기는 경우가 있습니다.
암호화 자체는 해킹되어 위조된 디지털 서명을 생성할 수 없습니다(정의는 곧 제공됨). 마치 수학이 해킹되어 2+2=5를 만들 수 없는 것처럼 암호화와 수학 모두 해킹될 수 있지만 잘못 사용될 수 있습니다. 암호화를 사용하는 시스템이 손상된 경우 이는 설계자가 암호화를 잘못 적용했기 때문일 수 있습니다. 암호화가 작동하지 않거나 누군가 암호화를 "깨뜨려서"가 아닙니다. 은행이 귀하의 계정을 잘못 처리하거나 엄마가 익숙하지 않은 첨부 파일을 다운로드하여 컴퓨터를 감염시키는 것은 수학 오류가 아닙니다. 바이러스는 이메일 버그와 다릅니다. 비트코인은 매우 간단한 암호화 애플리케이션이기 때문에 이는 중요한 기능입니다.
암호동물학은 검증되지 않은 신기술이 아닙니다. 비트코인에서 사용되는 모든 암호화 기술은 인터넷 초창기부터 사용되어 왔으며 매일 사용되는 많은 일반 인터넷 프로토콜의 중요한 부분입니다. NASA가 항공우주 과학을 신뢰할 수 있고 필요하다고 생각하는 것처럼 컴퓨터 과학자들은 암호화를 신뢰할 수 있고 필요하다고 생각합니다.
공개-개인 키 쌍: 암호화의 초석
공개-개인 키 쌍은 블록체인에서 사용되는 암호화의 초석입니다. 공개-개인 키 쌍은 개인 키와 공개 키라는 두 부분으로 구성됩니다. 이 두 키는 실제로 비밀번호와 사용자 이름 대신 사용되는 특정 수학적 관계가 있는 큰 정수에 지나지 않습니다.
귀하는 이름이나 사용자 이름과 마찬가지로 공개 키를 갖게 됩니다. 대부분의 경우 공개 키를 요청자와 공유할 수 있으며 공개 키를 소유한 사람이 이를 사용하여 귀하를 참조하거나 연락할 수 있습니다. 이는 귀하의 평판(또는 비트코인의 거래 내역)과 연결되어 있으므로 다양한 목적으로 여러 공개 키(따라서 여러 공개-개인 키 쌍)를 가질 수 있습니다. 공개 키는 계정을 참조하거나 보는 데 사용될 수 있지만 그 자체로는 계정에 대해 아무 작업도 수행할 수 없습니다.
개인 키는 비밀번호와 같아야 합니다. 누구와도 공유해서는 안 되며 BTC(비트코인) 전송과 같은 특정 작업을 확인하는 데 사용됩니다.
하지만 개인 키와 비밀번호에는 중요한 차이가 있습니다. 비밀번호를 사용하려면 비밀번호를 확인할 수 있도록 개인이나 서버에 보내야 합니다. 비밀번호가 전송된 후 책임감 있게 처리될 것이라는 점을 신뢰해야 합니다. 반면, 개인 키는 누구에게도 보내지 않고도 자신의 신원을 증명하는 데 사용할 수 있습니다. 그것이 저장되거나 직접 사용된 유일한 장소는 로컬 장치입니다.
누구에게도 비밀 정보를 보내지 않고 자신을 인증할 수 있다면 보안에 대한 완전한 통제권을 보장받을 수 있기 때문에 이는 중요합니다. 즉, 다른 시스템의 보안 위반에 덜 취약합니다. 이는 비트코인을 흔들리지 않게 만드는 중요한 부분입니다. 비트코인 자체는 공격자에게 유출될 수 있는 비밀번호나 개인 키를 저장하지 않지만 사용자는 여전히 거래를 확인할 수 있습니다.
하지만 개인 키를 누구에게도 보내지 않는다면 거래를 확인하기 위해 개인 키를 어떻게 사용합니까? 대답은 개인 키와 공개 키 사이의 수학적 관계, 즉 디지털 서명과 관련이 있습니다.
디지털 서명
디지털 서명을 생성하고 확인하는 데는 다양한 기술이 있으며, 해당 작업을 뒷받침하는 수학은 이 기사의 범위를 훨씬 벗어납니다. 암호화에 익숙하지 않은 사람들에게는 여기에 설명된 프로세스가 처음에는 믿기지 않을 수도 있습니다. 나는 4년 전 비트코인을 처음 공부하기 시작했을 때 이런 느낌을 분명히 기억합니다.
이제 이러한 기술은 많은 일반적인 인터넷 프로토콜에서 사용되며 정보 과학의 확립된 부분이라는 점을 다시 간략하게 언급하겠습니다.
공개 키를 개인적으로 교환한 Alice와 Bob이라는 두 사람이 있다고 상상해 보세요. Alice는 Bob에게 메시지를 보내고 싶어하지만 Bob은 매우 의심스러운 사람이므로 수학적, 결론적으로 증명할 수 없으면 메시지가 실제로 Alice에게서 온 것이라고 믿지 않습니다. 증거를 용이하게 하기 위해 그들은 디지털 서명을 사용하는 데 동의했습니다.
서명을 생성하기 위해 Alice는 개인 키와 전체 메시지를 입력으로 받아 디지털 서명을 생성하는 컴퓨터의 서명 생성 알고리즘을 사용합니다. 그런 다음 그녀는 이 메시지/서명 조합을 Bob에게 보냅니다. 그러나 중요한 것은 그녀가 개인 키를 보내지 않는다는 것입니다.
Bob은 메시지와 서명을 받으면 보완적인 서명 확인 알고리즘을 호출할 수 있습니다. 알고리즘은 메시지와 서명을 입력으로 사용하여 Alice가 서명을 생성하는 데 사용하는 공개-개인 키 쌍에서 공개 키를 결정합니다. Bob이 자신의 알고리즘이 Alice의 공개 키를 출력하는 것을 확인하면 비록 자신이 Alice의 공개-개인 키 쌍에 있는 개인 키를 모르고 계산할 수 없더라도 서명이 실제로 Alice의 공개-개인 키 쌍을 사용하여 생성되었음을 수학적으로 증명한 것입니다. .
간결하게 말하면, 이 디지털 서명 프로세스를 통해 Bob은 메시지가 일부 제3자에 의해 생성되거나 수정되지 않았지만 Alice의 개인 키를 알 필요 없이(또는 알 수 없음) Alice의 개인 키를 사용하여 생성되어야 함을 확인할 수 있습니다. 열쇠. 그에게 필요한 것은 메시지/서명 조합과 공개 키뿐입니다.
직관적으로 이것이 믿기지 않을 수도 있고, 어딘가 오해가 있는 것처럼 느껴질 수도 있습니다. Alice의 개인 키와 공개 키가 밀접하게 관련되어 있고 Alice가 자신의 개인 키를 사용하여 Bob이 받는 서명을 생성한다면 왜 Bob은 Bob의 개인 키가 아닌 공개 키만 파생할 수 있습니까? 이 질문에 대한 답을 이해하려면 대부분의 사람들보다 수학에 대한 더 깊은 이해가 필요하며 이는 이 책의 범위를 훨씬 벗어납니다.
이에도 불구하고 이 기술은 매일 사용되며 암호화 커뮤니티 내에서 견고한 것으로 간주됩니다. 주소가 https로 시작하는 웹 사이트를 방문할 때 "s"는 해당 웹 사이트가 디지털 서명을 사용하여 인증되었음을 나타냅니다. 귀하의 컴퓨터는 위 예의 Bob과 같은 서명 확인 알고리즘을 사용하여 웹 사이트가 실제로 올바른 공개-개인 키 쌍에서 나온 것인지 확인합니다. 디지털 서명은 귀하와 웹사이트 사이의 모든 추가 상호 작용이 암호화되고 인증되도록 보장합니다. 확인에 실패하면 브라우저에서 경고를 표시하고 사이트를 위험하다고 표시합니다.
충분히 큰 정수
이전에 개인 키와 공개 키는 사용자 이름과 비밀번호처럼 작동하지만 실제로는 특별한 수학적 관계가 있는 큰 정수에 지나지 않는다는 점을 간략하게 언급했습니다. 이에 대해 저는 종종 다음과 같은 질문을 받습니다.
“컴퓨터를 사용하여 여러 숫자를 추측하거나 계산하고 이를 개인 키로 사용할 수 있습니까? 결국 대상 공개의 개인 키를 발견할 수 있습니까? 개인 키 쌍을 사용하여 해당 신원을 제어할 수 있습니까? 실제로 비트코인의 경우 이로 인해 공격자가 공개-개인 키 쌍이 보유한 비트코인 중 일부를 훔칠 수 있습니다.
좋은 질문이지만 그런 일은 일어나지 않을 것입니다. 이전에 언급했듯이 수백만 달러 상당의 BTC를 보유하고 있는 여러 비트코인 주소가 있지만 몇 년 동안 이동되지 않았습니다. 이를 훔치는 데 필요한 것은 올바른 개인 키뿐인데도 이는 올바른 큰 정수입니다! 이 주소의 개인 키를 추측할 수 있다면 누구에게나 돈을 보낼 수 있습니다. 비밀번호와 달리 개인 키는 컴퓨터에서 로컬로 확인할 수 있으며 시도 횟수나 빈도를 제한하는 서버가 없습니다.
그럼 왜 아직 아무도 돈을 훔치지 않았나요? 그 대답은 개인 키로 사용되는 숫자의 거의 터무니없는 크기에 있습니다. 그들은 충분히 크다.
간단한 사고 실험으로 시작합니다. 개인 키가 전 세계의 모든 컴퓨터가 함께 작동하여 이를 추측하는 데 24시간이 걸릴 만큼 크다고 상상해 보세요. 개인 키에 숫자 하나만 추가하면 컴퓨터에 10배의 계산 노력이 필요하게 되며, 이는 하루가 아닌 10일이 소요된다는 의미입니다. 여섯 자리 숫자를 더하면 그 시간은 27,000년이 됩니다.
어쨌든 개인 키를 생성하기 위해 난수를 생성하는 데 필요한 계산 능력은 사소합니다. 개인 키를 사용하여 서명을 생성하고 공개 키를 사용하여 이러한 서명을 확인하는 것도 계산적으로 간단합니다. 그러나 개인 키를 추측하는 데 필요한 작업량은 숫자가 추가될 때마다 기하급수적으로 증가합니다. 개인 키를 무차별 대입에 "면역"시키려면 충분한 숫자를 추가하기만 하면 됩니다. 즉, 숫자를 충분히 크게 만들기만 하면 됩니다.
얼마나 크면 충분합니까? 비트코인에서 사용되는 개인키는 256비트 정수로, 길이가 76비트인 숫자에 해당합니다. 이 숫자의 크기는 믿어지지 않습니다. 다음 설명의 대부분은 충분히 큰 정수에 대한 직관적인 설명을 제공하는 Bruce Schneier의 책 "Applied Cryptography"에서 나온 것입니다.
먼저, 열역학 제2법칙의 구체적인 결론은 단일 이진 정보 비트의 존재를 변경하는 데 필요한 최소 에너지(1을 0으로 또는 그 반대로 변경)라는 점을 이해해야 합니다. 이는 사용된 하드웨어에 관계없이 모든 계산 프로세스를 수행하는 데 최소한의 에너지가 필요함을 의미합니다.
이제 태양의 전체 에너지 출력을 활용하여 공개-개인 키 쌍(BTC를 제어할 수 있음)을 찾기 위해 개인 키를 계산하거나 추측하는 작업을 수행하는 특별히 설계된 컴퓨터에 전력을 공급할 수 있다고 상상해 보십시오.
약간의 수학과 열역학을 사용하면 1년 동안 태양의 에너지 출력을 계산할 수 있는 성능을 갖춘 매우 효율적인 컴퓨터가 2178개의 값을 계산할 수 있다는 것을 알게 될 것입니다. 이 값을 가능한 개인 키 수인 2256으로 나누면 태양의 연간 에너지 출력에 해당하는 컴퓨팅 성능을 갖춘 이 가상의 컴퓨터는 가능한 개인 키 전체 수의 0.0000000000000000000003%만 추측하거나 계산할 수 있다는 것을 알 수 있습니다.
또한 이는 단지 개수일 뿐이며 각 개인 키가 올바른 공개 키에 해당하는지 실제로 확인하는 더 복잡한 작업은 포함되지 않습니다. 따라서 이 컴퓨터는 자신도 모르는 사이에 1년에 0.0000000000000000000003%의 올바른 개인 키를 놓칠 수 있습니다.
이 숫자는 장치의 기술과는 아무런 관련이 없으며 1930년대 이후 확립된 열역학 법칙에 따라 가능한 최대 값입니다. 이 숫자는 컴퓨터가 물질이 아닌 다른 것으로 만들어지고 공간이 아닌 다른 것을 차지하지 않는 한 256비트 키(비트코인에서 사용되는 키)에 대한 무차별 대입 공격이 불가능하다는 것을 의미합니다.
이것은 충분히 큰 정수의 힘입니다. 해커가 아무리 강력하더라도, 태양 3×1023의 힘으로 1년을 계산하거나 태양 1개의 힘으로 3×1023년을 계산하지 않으면 그의 컴퓨터는 모든 개인 키 계산도 완료할 수 없습니다. 테스트하거나 다른 방법으로 사용하십시오.