쉬운 설명

쉬운 설명 · 전체 7부 중 5부

누가 읽을 수 있고, 무엇이 비공개로 남는가

때로는 온 세상에 무언가를 증명하고 싶은 것이 아니라, 단지 몇몇 사람에게만 증명하고 싶을 때가 있습니다. 아직 발표할 준비가 되지 않은 발견을 함께한 공동 저자들, 비밀 계약을 맺은 당사자들, 비밀 레시피를 믿고 맡긴 친구 같은 경우입니다. 그래도 블록체인이 주는 영구적이고 위변조가 드러나는 타임스탬프는 갖고 싶습니다. 다만 낯선 사람들이 곁에서 함께 읽는 것은 원하지 않을 뿐입니다.

Label 309의 봉인된 증명은 이 문제를 해결합니다. 선택한 사람만 열 수 있도록 콘텐츠를 잠근 뒤, 그래도 타임스탬프가 찍힌 레코드를 공개 원장에 기록합니다. 그러면 자연히 이런 걱정이 듭니다. 이것은 공개 원장이니 누구나 들여다볼 수 있다는 것입니다. 그렇다면 그들은 실제로 무엇을 보게 될까요?

솔직한 답은 "놀라울 만큼 적다"입니다. 하지만 아무것도 보이지 않는 것은 아닙니다. Label 309은 그 차이를 정확하게 짚어 내는 데 신경을 씁니다.

잠긴 상자들이 늘어선 모습을 그려 보기

봉인한 메시지를 누구나 앞을 지나칠 수 있는 금고 벽 안에 넣어 두었다고 상상해 보십시오. 그 벽에는 작고 똑같이 생긴 잠긴 상자들이 한 줄로 늘어서 있습니다. 보내려는 사람의 수만큼 하나씩입니다. 어느 상자에나 같은 메시지를 여는 키가 들어 있지만, 각 상자는 특정한 한 사람의 개인 키로만 열 수 있습니다.

지나가는 사람은 벽을 볼 수 있습니다. 상자들이 늘어서 있는 것도 보입니다. 개수를 셀 수도 있습니다. 하지만 할 수 없는 것은 어떤 상자도 열지 못하고, 누구의 키가 어느 상자에 맞는지 알아내지 못하며, 안에 적힌 글자를 단 한 마디도 읽지 못한다는 것입니다.

이것이 Label 309 봉인 방식이 작동하는 거의 그대로의 모습입니다.

낯선 사람에게 보이는 것

  • 무언가가 봉인되었다는 사실. 레코드는 평문이 아니라 잠긴 콘텐츠를 담고 있다는 점을 드러내 놓고 표시합니다. (지켜보는 사람은 일반적인 잠금을 썼는지 포스트 양자 안전 잠금을 썼는지까지는 알 수 있습니다. 하지만 그 이상은 알 수 없습니다.)
  • 타임스탬프 — 네트워크가 레코드의 존재에 합의한 순간으로, 초 단위까지 정확합니다. 바로 이것이 핵심이며, 공개되도록 의도된 것입니다.
  • 콘텐츠의 지문 — 일반적인 존재 증명에 쓰이는 것과 같은 단방향 코드입니다. 콘텐츠 자체에 대해서는 아무것도 드러내지 않으며, 다시 콘텐츠로 되돌릴 수도 없습니다.
  • 수신자가 대략 몇 명인지 — 잠긴 상자의 개수입니다. 이것이 유일하게 새어 나가는 정보이며, 뒤에서 다시 다루겠습니다.

숨겨진 채 남는 것

  • 실제 콘텐츠. 콘텐츠는 결코 원장에 올라가지 않습니다. 원장에는 그 지문과 잠긴 상자들만 있을 뿐이고, 암호화되어 뒤죽박죽이 된 파일 본체는 온체인 밖에 있습니다. 맞는 개인 키가 없으면, 콘텐츠는 그저 잡음일 뿐입니다.
  • 수신자가 누구인지. Label 309은 레코드의 어디에도 수신자의 이름이나 공개 키를 두지 않습니다. 읽어 낼 수 있는 "to:" 필드가 없습니다. 수신자는 자신의 키를 각 상자에 조용히 시험해 보다가 하나가 열려야 비로소 그 메시지가 자신의 것임을 알게 됩니다. (여기서 솔직하게 세부 사항을 하나 덧붙이겠습니다. 관찰자가 의심하는 어떤 사람의 정확한 공개 주소를 이미 손에 쥐고 있더라도, 고전 X25519 잠금은 그것을 확인해 주지 않습니다. 하지만 기본값인 포스트 양자 잠금은 그 특정한 약속까지는 하지 않습니다. 아래 주의 사항을 참고하십시오.)
  • 누가 보냈는지 — 서명하지 않기로 선택한 경우입니다. Label 309에서 작성자임을 서명하는 것은 언제나 선택 사항입니다. 서명하지 않으면, 레코드에는 발신자와 연결되는 그 무엇도 남지 않습니다. 모든 상자에는 아무도 가리키지 않는, 새로 만들어진 일회용 키 자료만 들어 있습니다.

그리고 더 눈에 띄지 않는 두 가지 보호도 그에 못지않게 중요합니다.

  • 수신자들은 서로를 볼 수 없습니다. 자신의 상자를 열어도 다른 누구에 대해서도 아무것도 알 수 없습니다. 또 누가 포함되었는지 알아낼 수 없고, 그들 역시 발신자에 대해 알 수 없습니다.
  • 순서는 뒤섞입니다. 게시하기 전에 상자들은 무작위 순서로 뒤섞입니다. 그래서 상자의 위치 — 맨 앞인지 맨 뒤인지 — 조차 누가 "주된" 수신자인지, 그룹이 어떻게 짜여 있는지에 대해 아무런 단서도 흘리지 않습니다.

솔직하게 밝혀 두는 한 가지 주의 사항

개수는 보입니다. 낯선 사람은 수신자가 누구인지 는 알 수 없지만, 상자를 세어 몇 명인지 는 알 수 있습니다. 대부분의 용도에서 이것은 무해합니다. 공동 저자 세 명, 계약 당사자 두 명 같은 경우입니다. 하지만 그 숫자마저 민감하다면, 흐릿하게 만들 수 있습니다. 채움용으로 상자 몇 개를 더 넣거나, 발송을 여러 레코드로 나누는 것입니다. Label 309이 대신 개수를 숨겨 주지는 않으므로, 그것이 중요한 상황이라면 직접 손을 써야 합니다.

상자가 누구에게 가는지를 숨기는 것에 대해 한 가지 더 솔직하게 적어 두겠습니다. 고전 X25519 잠금은 증명 가능한 방식으로 "키 비공개(key-private)"입니다. 의심되는 수신자들의 공개 주소 목록을 손에 쥔 관찰자조차도 어느 상자가 — 만약 있다면 — 그중 누구에게 가는지 시험할 수 없습니다. 기본값인 포스트 양자 잠금(X-Wing)도 평범한 낯선 사람으로부터는 똑같은 것들을 숨깁니다. 하지만 Label 309은 그것에 대해 이 한층 강한 보장을 주장하지 않습니다. 의심되는 수신자의 정확한 공개 키를 이미 가진 공격자에 맞서 그 시험을 좌절시킨다고 약속하는 것은 오직 고전 잠금뿐입니다. 만약 바로 그 위협이 우려되는 상황이라면, 봉인에는 고전 방식의 age1… 키를 선택하십시오. 그렇지 않다면 포스트 양자 기본값이 올바른 선택입니다.

정확을 기하는 김에, 작은 솔직함을 두 가지 더 밝혀 둡니다. 타임스탬프는 초 단위까지 정확하므로, 시점 그 자체 가 민감한 유출이라면 그것 자체가 실제 노출이 됩니다. 또한 레코드는 어느 지갑이 Cardano 트랜잭션의 비용을 지불했는지 를 숨길 수 없습니다. 그것은 봉인된 레코드 바깥, 트랜잭션 자체에 기록되어 있기 때문입니다. 따라서 그것을 숨겨야 하는 사람은 지갑 수준에서 직접 손을 써야 합니다.

또한 키를 건넨 사람은 저장된 콘텐츠가 존재하는 한 언제까지나 그 메시지를 읽을 수 있다는 점도 기억해 둘 만합니다. 봉인이 지켜 주는 것은 세상으로부터이지, 믿고 선택한 사람들로부터가 아닙니다.

강력한 프라이버시, 단 하나의 작은 누출 — 있는 그대로

Label 309 봉인은 콘텐츠, 수신자가 누구인지, 그리고 (서명하지 않는다면) 발신자 자신마저도 숨깁니다. 체인을 지켜보는 사람이 확실히 알아낼 수 있는 단 하나는 대략 몇 명 을 위해 봉인했는지뿐입니다. 한 가지 세부 사항은 이것입니다. 의심되는 수신자의 정확한 공개 키를 이미 가진 공격자에 맞서 "그 사람인지조차 확인할 수 없다"는 가장 강력한 보장은 고전 X25519 잠금에 대해서만 주장되며, 포스트 양자 기본값에서는 그렇지 않습니다. 자세한 내용은 보안 모델을 참고하십시오.