서명을 유지한 채 공개하기

서명을 유지한 채 공개하기

보호된 필드가 노출될 경우, 대개는 해당 플랫폼을 신뢰해야 합니다. 저희는 각 필드에 개별적으로 서명을 하여, 사용자들이 직접 확인할 수 있도록 하고 있습니다.

디지털 제품 패스는 모든 사람에게 동일한 정보를 보여주지는 않습니다. 구매자는 공개된 데이터만 볼 수 있습니다. 수리 업체나 재가공 업체는 더 많은 정보를 볼 수 있습니다. 시장 감시 당국은 모든 정보를 볼 수 있습니다. 이는 이미 명확히 정해져 있으며, 현재 유럽 표준에서도 이를 명시적으로 규정하고 있습니다.

더 흥미로운 질문은 다음과 같습니다. 누군가가 공개 데이터를 넘어 보호된 항목을 볼 수 있게 된다면, 하필 그 항목들이 진짜라는 것을 입증할 수 있을까요? 아니면 플랫폼이 해당 항목을 정확하게 선별하여 변조 없이 전달했다고 믿어야만 할까요?

공증인이 편지 전체를 공증하는 것이 아니라 각 단락을 개별적으로 공증한다고 상상해 보십시오. 공개된 편지는 누구나 받을 수 있습니다. 더 많은 내용을 볼 권리가 있는 사람은 추가 단락을 받게 되며, 그 단락들 각각에는 여전히 동일한 공증인의 인장이 찍혀 있습니다. 저희는 바로 이런 방식으로 플랫폼을 구축했습니다. 대부분의 플랫폼에서 위 질문에 대한 솔직한 대답은 ‘신뢰’입니다. 저희의 대답은 ‘공개 시점에 추가되는 각 필드에 대한 증거’입니다. 이 글에서는 이러한 차이가 왜 중요한지, 그리고 왜 저희가 더 번거로운 길을 택했는지를 설명합니다.

접근 규칙은 모두가 동일하게 준수합니다

DPP의 접근 권한, 보안 및 기밀성에 관한 유럽 표준인 EN 18239는 필드별로 접근을 제어할 것을 요구합니다. 즉, 각 필드마다 누가 볼 수 있는지에 대한 규칙이 존재합니다. 이는 올바른 요구 사항이며, 충족하기 어렵지도 않습니다. 이러한 표준들이 실제로 어떤 지위를 가지는지에 대해서는, 조화 표준에 관한 저희 게시물에서 자세히 설명한 바 있습니다.

이를 구현하는 일반적인 방법은 서버 측 필터를 사용하는 것입니다. 서버는 누가 요청하는지 파악하고, 해당 사용자가 볼 수 있는 내용을 조회한 뒤 정확히 그 부분만 반환합니다. 표준은 이 이상 요구하지 않습니다. 다만 표준이 다루지 않는 한 가지 문제가 있습니다. 바로 반환된 데이터에 인증 마크가 없다는 점입니다. 독자는 서버가 정직하게 내용을 선별했고 전송 과정에서 아무것도 변경하지 않았다고 믿어야 합니다. 공개된 안내문이라면 괜찮을 수 있습니다. 하지만 데이터 처리자가 중고 배터리 가격을 산정하는 데 바로 이 데이터를 근거로 삼는다면, 이는 지나친 믿음입니다.

가장 손쉬운 해결책은 데이터에 서명을 하는 것입니다. 범위의 양 끝단에서는 일반적인 서명이 잘 작동합니다. 즉, 공개용 보기 데이터에 서명하고, 전체 데이터 세트에 서명하는 방식입니다. 구체적인 진행 과정은 DPP의 ‘서명 및 인증서’ 섹션에 설명되어 있습니다. 문제는 중간에서 발생합니다. 문서 전체에 대한 서명은 서명 시점에 존재했던 필드만을 정확히 커버합니다. 권한 있는 독자에게 보호된 필드를 추가로 공개하면, 이 필드는 서명된 범위 밖에 위치하게 되어 보호되지 않은 상태로 수신자에게 전달됩니다. ‘누가 무엇을 보는지’에 대한 모든 가능한 조합을 미리 서명하는 일은 아무도 하지 않습니다. 조합의 수가 기하급수적으로 늘어나기 때문입니다. 결국 인장이 없는 필터 방식으로 되돌아가게 되며, 중간 단계는 다시 신뢰에 의존하게 됩니다.

각 필드를 개별적으로 서명하기

더 나은 설계 방식이 있으며, 우리는 이를 기반으로 플랫폼을 구축합니다. 완성된 문서를 하나의 블록으로 서명하는 대신, 제작자는 단 한 번의 처리 과정에서 각 필드를 개별적으로 지정합니다(표준에 정통한 분들을 위해: W3C 절차 ecdsa-sd-2023).

각 보기는 동일한 공개 필드에서 시작됩니다. 독자가 그 외의 내용을 볼 수 있게 되는 것은 필드별로 추가되며, 이러한 각 필드는 오프라인 상태에서, 재서명 없이, 보기를 구성한 기관에 대한 신뢰 없이도 제작자의 공개 키로 거슬러 올라갑니다. 권리가 없는 필드는 단순히 누락됩니다. 검은색으로 가려진 것이 아니라 아예 존재하지 않으며, 이를 통해 어떤 정보도 유출되지 않습니다.

한 번의 처리: 수리 업체

한 수리 ## 업체가배터리에 대해 정당한 이해관계를 신고했는데, 이는 배터리 규정에서 명시적으로 규정하고 있는 접근 단계 중 하나입니다. 이 업체의 정비 시스템은 자체 키를 사용하여 당사 인터페이스에 로그인하고 패스를 조회합니다. 응답은 구매자가 보는 것과 동일한 공개 패스이지만, 정확히 하나의 필드가 더 추가되어 있습니다. 바로 권한이 있는 사용자에게만 공개되는 분해 지침입니다. 별도의 문서도, 특별 버전도 아닙니다.

업체가 이 필드를 신뢰하기 전에, 해당 업체의 소프트웨어는 제공된 인증 마크를 제조사의 공개 키와 대조하여 검증합니다. 검증이 성공하고, 특히 추가 필드에 대한 검증도 통과되면, 업체는 이 설명서가 제조사에서 제공된 것과 문자 하나까지 정확히 일치하며, 전달 과정에서 누구도 이를 변경하지 않았음을 확신하게 됩니다. 검증이 통과되지 않으면, 사용자는 해당 화면을 통째로 무시합니다. 사용자가 자신에게 허용된 필드만을 정확히 수신하도록 하는 것은 당사의 접근 제어 시스템의 역할입니다. 새로운 점은 그 다음 단계입니다. 수신된 내용이 진위인지 여부는 당사에 문의하지 않고 사용자가 직접 확인합니다.

‘파손되지 않은’ 상태가 핵심인 이유

파손되지 않은 봉인은 내용이 사실임을 보장하지 않습니다. 그것은 단지 ‘제조사가 정확히 이것을 기록했고, 그 이후로 아무도 그 내용을 변경하지 않았다’는 것을 말해줄 뿐입니다. 따라서 문서를 단순히 전달하기만 한 모든 주체 - 캐시, 네트워크, 아카이브, 우리 - 는 신뢰의 문제에서 제외됩니다. 누가 당신에게 여권을 건넸는지는 더 이상 중요하지 않습니다.

그리고 봉인은 이진적입니다. 유효하거나 무효하거나, 반쯤 깨진 봉인은 존재하지 않습니다. 따라서 추가 필드가 봉인과 함께 전달되든 없든, 그 차이는 점진적인 차이가 아닙니다. 봉인이 없다면 해당 필드의 정보가 약간 덜 기록된 것이 아니라, 아예 기록되지 않은 것입니다.

두 가지 확인 방법

누구나 직접 확인해 볼 수 있습니다. Transpareo Time Machine은 제품 패스를 위한 당사의 오픈 소스 뷰어 앱입니다. 이 앱은 패스의 버전 이력을 훑어보며, 당사의 서버에 요청하지 않고도 사용자의 브라우저에서 각 서명을 재계산합니다. 티셔츠의 패스에는 문서 전체에 걸친 서명이, 배터리의 패스에는 필드별 승인 서명이 포함되어 있습니다.

두 가지 모두 공개된 W3C 표준이며, 누구나 구현할 수 있습니다. 문서 전체에 걸친 서명은 구축 및 운영 비용이 훨씬 저렴하며, 공개 데이터만 제공하는 경우에는 이 방식으로 충분합니다. ‘타임 머신’이 두 가지 방식을 모두 지원하는 것은 의도된 것입니다. 패스는 당사의 도구뿐만 아니라, 호환되는 모든 도구가 검증할 수 있는 일반적인 표준 형식을 유지합니다.

누구에게 도움이 되는지, 그리고 표준이 요구하는 바

공개 데이터를 넘어 실제로 어떤 정보가 공개되는 것일까요? 우연히 지나가던 구매자에게는 아닙니다. 중고 배터리 팩의 가치를 평가하는 가공업체, 위험에 대한 보험료를 책정하는 보험사, 화학 물질을 분류하는 재활용업체, 사건을 조사하는 당국 등이 바로 그 대상입니다. 그들의 결정이 금전이나 안전과 직결되는 독자들입니다. 그리고 일반적인 접근 방식에서는, 바로 그들의 결정이 의존하는 항목들에 대해서는 인증 마크를 받지 못하는 바로 그 독자들입니다. 우리는 인증 마크가 모두에게 동일한 의미를 가져야 한다고 생각합니다. 표시된 모든 항목은 제조업체에서 제공된 것이며 그 이후로 손대지 않았다는 뜻이어야 합니다. 공개된 필드에만 적용되는 인증 마크는 반쪽짜리 인증 마크일 뿐입니다.

솔직히 말씀드리자면, 이 중 어떤 것도 의무 사항은 아닙니다. EN 18239 표준은 접근 권한을 제어할 것을 요구하며, 서버상의 필터가 이를 완벽하게 수행합니다. 공개된 필드를 검증 가능하게 만드는 것은 우리가 추가로 하는 조치입니다. 서명된 패스의 진정한 의미는 누구도 플랫폼을 신뢰할 필요가 없다는 점이기 때문입니다. 중간 단계를 예외로 제외하는 것은 바로 서명이 없애려 했던 그 신뢰를 다시 불러오는 것입니다.

같은 원리로 특정 필드를 생략할 수 있습니다

각 필드를 일일이 지정하는 것은 두 번째 특성을 수반하며, 이는 실제로 유럽 법이 요구하는 사항입니다. 일반 데이터 보호 규정은 개인에게 개인정보를 삭제할 권리를 부여합니다. 한 블록으로 서명된 데이터 세트는 자체 서명을 파괴하지 않고서는 이를 이행할 수 없습니다.

여기서는 각 필드가 독립적으로 존재하기 때문에, 나머지 모든 필드는 유효성을 유지한 채로 단일 필드만 제거할 수 있습니다. 실수로 여권에 개인정보가 포함되더라도, 해당 정보는 깨끗하게 제거되며 여권은 유효한 상태를 유지합니다: 재발급도, 기록의 단절도 없습니다. 법이 보존을 요구하는 필드는 그대로 남고, 삭제 가능한 항목은 요청 시 몇 년이 지난 후에도 삭제할 수 있습니다.

이것이 왜 어려운지, 그리고 우리가 어떻게 해결했는지

이방식을 우리가 발명한 것은 아니며, 이는 공개된 W3C 표준입니다. 아이디어를 내는 것은 어렵지 않습니다. 어려운 점은 10년 후에도 여권이 여전히 검증을 받을 수 있도록 시스템을 구축하는 것입니다. 일반적인 서명은 문서의 바이트를 기반으로 계산합니다. 필드별 서명은 문서의 개별 항목을 기반으로 계산하며, 이를 위해 서명 전에 여권을 각 항목이 별도의 문장으로 구성된 고정된 형식으로 변환합니다. 이 표기 방식은 10년 후에도 문자 하나하나가 정확히 재현되어야 하며, 그렇지 않으면 인증이 더 이상 유효하지 않습니다. 이를 가로막는 세 가지 눈에 띄지 않는 문제가 있었는데, 우리는 이 세 가지를 모두 근본적으로 해결했습니다.

숫자는 데이터 유형을 잃어버립니다. 2.0과 같은 값은 일반적인 데이터 형식을 한 번 거치면 2로 변환되어 돌아옵니다. 사람에게는 똑같은 값이지만, 고정된 표기법에서는 다른 문장이 됩니다. 저희 시스템에서는 모든 값이 데이터 유형과 함께 저장되며, 유형이 없는 숫자가 단 하나라도 나타나면 공개가 중단됩니다.

명칭만으로는 의미가 아닙니다. 모든 필드명은 사전에서 명확한 의미를 지녀야 하며, 그렇지 않으면 변환 과정에서 해당 필드가 조용히 사라지고 인장이 이를 덮지 못합니다. 저희 시스템에서는 모든 사전이 로컬에 저장되어 있으며 네트워크를 통해 불러오는 일이 절대 없습니다; 알 수 없는 필드 이름이 발견되면, 빈 결과를 조용히 반환하는 대신 서명 처리가 중단됩니다.

항목에는 고정된 이름이 필요합니다. 문서 내의 모든 항목은 매번 새로운 보조 이름을 할당하는 대신, 매 실행 시 표기법이 동일하게 유지되도록 고정된 식별자를 갖습니다.

가장 민감한 부분은 제조사의 고유 키에 있습니다. 각 발급 시마다 공개 가능한 필드마다 개별적으로 서명하는 데 사용되는 추가적인 단기 유효 키가 필요합니다. 이 키는 제조사가 직접 생성하고 폐기합니다. 이 키가 저희에게 있다면, 나중에 개별 필드를 임의로 만들어낼 수 있을 것입니다. 각 여권에는 이러한 서명이 두 개씩 부착되어 있는데, 하나는 제조사의 것이고 다른 하나는 Transpareo의 것으로, 개별적으로 공개되는 필드에도 동일하게 적용됩니다.

저희에게는 이러한 노력이 필요한 곳에 제대로 투자된 것입니다. 각 여권은 공개 시 서명되고 이전 버전과 연결되며, 여권이 EU-DPP 등록부에 등록되는 즉시 변경 불가능한 10년 아카이브가 적용됩니다. 전체 블록 대신 각 필드별로 서명하는 것은 이 핵심 기능의 확장일 뿐, 부가적인 기능이 아닙니다.

현재 상황

우리는모든 독자를 위해 ‘증명’ 방식을 선택했습니다. 왜냐하면 인증 마크는 누가 보든 동일한 의미를 가져야 하기 때문입니다. 작동 방식을 직접 확인하고 싶으신 분들은, 위에 링크된 두 개의 예시 패스를 서버에 요청하지 않고 브라우저에서 바로 검증해 보실 수 있습니다.

이 게시물에 대한 질문

특정 표준에서 필드별 시그니처를 규정하고 있습니까?

아닙니다. DPP의 접근 권한에 관한 유럽 표준인 EN 18239는 필드별로 접근을 제어할 것을 요구하며, 서버 측 필터가 이를 완벽하게 충족시킵니다. 공개된 필드에 대해 추가로 검증 가능성을 제공하는 것은 당사의 결정일 뿐, 규제가 요구하는 단순한 체크 항목이 아닙니다. 서명된 패스의 존재 이유 자체가 누구도 플랫폼을 신뢰할 필요가 없다는 점에 있기 때문에, 우리는 이러한 노력이 정당하다고 생각합니다. 이러한 표준들이 실제로 어떤 지위를 갖는지에 대해서는 ‘조화 표준’에 관한 저희 게시물에서 확인하실 수 있습니다.

우리는 공개된 데이터만 게시합니다. 이게 정말 필요한가요?

아마도 그렇지 않을 것이며, 우리도 그렇게 말합니다. 문서 전체에 적용되는 서명은 모든 필드가 공개된 여권을 포괄하며, 구축 및 운영 비용도 훨씬 저렴합니다. 필드별 인증은 두 번째 대상 그룹이 추가되는 순간부터 그 가치를 발휘합니다. 예를 들어 수리망, 재활용 업체, 또는 인장이 없는 발췌본을 넘겨주게 될 관공서 등이 해당됩니다. 두 방식 모두 공개된 W3C 표준(필드별 서명의 경우 ecdsa-sd-2023)이며, 해당 표준을 지원하는 모든 도구가 이를 검증할 수 있습니다. 또한 현재 두 방식 모두 Transpareo Time Machine에서 실행되고 있으며, 티셔츠와 배터리의 ‘여권’에 적용되어 있습니다.

신분증을 무효화하지 않고도 나중에 개인정보를 삭제할 수 있나요?

네, 그리고 이 부분은 실제로 유럽 법에서 요구하는 사항입니다. 일반 데이터 보호 규정(GDPR)은 개인에게 개인정보를 삭제할 권리를 부여하고 있으며, 블록으로 서명된 데이터 세트는 자신의 서명을 파괴하지 않고서는 이 요구를 충족할 수 없습니다. 여기서는 각 필드가 개별적으로 정의되어 있기 때문에, 재발행이나 버전 이력 파손 없이도 단일 필드만 제거할 수 있으며 나머지 모든 필드는 계속해서 유효성을 유지합니다. 법에서 보존을 요구하는 필드들은 그대로 남아 있습니다.

서명 키는 누가 가지고 있나요?

각 패스에는 두 개의 인장이 찍혀 있으며, 그중 하나는 귀하가 소유할 수 있습니다. 또한 각 발급 건마다 공개 가능한 필드를 개별적으로 서명하는 일시적인 키가 추가로 필요합니다. 이 키는 제조사가 직접 생성하고 폐기합니다. 만약 이 키가 저희에게 있다면, 나중에 개별 필드를 임의로 조작할 수 있기 때문입니다. 반환된 인장은 신뢰하기 전에 저장된 공개 키로 검증합니다. 따라서 각 여권에는 두 개의 독립 기관이 발급한 두 개의 인장이 부착되어 있으며, 이는 개별적으로 공개되는 필드뿐만 아니라 전체 데이터 세트에도 동일하게 적용됩니다.

10년 후에도 여권이 유효할까요?

바로 그 부분에 어려움이 있습니다. 필드별 서명은 문서의 바이트 단위가 아닌 개별 정보를 기반으로 계산되므로, 10년 후에도 동일한 고정된 형식이 문자 하나하나까지 정확히 재현되어야 합니다. 이를 방해하는 세 가지 요소가 있었는데, 우리는 이 세 가지를 모두 근본적으로 해결했습니다. 모든 값은 해당 유형과 함께 저장되며, 모든 사전은 당사에 보관되어 있어 네트워크를 통해 불러오는 일이 없으며, 모든 항목에는 고유 식별자가 부여됩니다. 변경 불가능한 10년 보관 시스템이 구축되었으며, 여권이 EU 등록부에 등록되는 즉시 적용됩니다. 이에 대한 자세한 내용은 당사의 등록 규정 분석에서 확인하실 수 있습니다.

접근 권한 수준 및 증빙 자료에 대한 최신 정보

선택적 공개, 서명 및 DPP 표준의 발전 - 매월 요약본을 이메일로 받아보세요.