IPFS는 웹3를 여는 핵심 프로토콜입니다.

IPFS 블로그 사이트 에 올라온 최근 1년 동안의 글 몇 개를 요약합니다.


IPFS on the Web in 2024: Update From Interplanetary Shipyard

https://blog.ipfs.tech/2024-shipyard-improving-ipfs-on-the-web/

2024-11-25

  • 별도 법인으로 독립한 Interplanetary Shipyard는 IPFS 생태계의 기반을 이루는 여러 프로젝트들을 진행하고 있다
    • IPFS on the Web, Verified Fetch, Service Worker Gateway, Browser Transport, AutoTLS with libp2p.direct 등을 개발했다
    • AutoNAT v2, NAT Hole Punching, js-libp2p Amino DHT Bootstrapper, libp2p over HTTP, WebSockets single encryption 등을 개발하고 있다
  • Browser Transport 상세
    • 브라우저 프로토콜은 웹 IPFS의 아킬레스건이다
    • HTTPS 프로토콜 지원 개선: AutoTLS를 개발했다. 이제 IPFS 노드에 Let's encrypt TLS cert를 자동 발급/갱신 가능하다
    • WebRTC 프로토콜 지원 개선: 작년(2024년?), Circuit Relay를 이용한 탈중앙화 시그널링 메카니즘이 적용됐다

The Static Website Manifesto

https://blog.ipfs.tech/2025-03-static-web-manifesto/

2025-03-06

  • Orbiter 서비스에 관한 이야기다. Orbiter 서비스는 IPCM(InterPlanetary CID Mapping) 기술에 기반한다
  • IPCM 상세
    • https://ipcm.dev/
    • 스마트컨트랙트가 IPFS CID 참조를 제공한다
    • 누구나 읽기 참조가 가능하지만 CID 갱신은 스마트컨트랙트 소유자만 가능하다
    • IPNS의 간단하고 효과적인 대체물이다 (오픈소스 & MIT 라이선스)

WebRTC with js-libp2p

https://docs.libp2p.io/guides/getting-started/webrtc/

브라우저-to-브라우저 연결 방법에 대한 튜토리얼

  • WebRTC와 libp2p는 서로를 보완한다
    • WebRTC는 브라우저-to-브라우저 통신을 가능하게 한다
    • libp2p는 메쉬 형태의 p2p 연결을 가능하게 한다
  • 이 글은 브라우저-to-브라우저 연결을 위해 libp2p peer(즉, IPFS 노드)를 relay 역할로 설정하고 운영하는 방법을 설명한다

작년, IPFS의 GossipSub 프로토콜을 이용해서 브라우저 p2p 연결에 기반한 IPFS 서비스 개념 검증을 한 적이 있습니다. 본문의 마지막 꼭지 "WebRTC with js-libp2p" 문서가 이 기술에 대한 튜토리얼입니다. 이 기술을 이용하면 Center 없는 서비스, 즉 서버 없는 서비스를 실현할 수 있습니다. 주목할만한 웹3 기술이라고 생각합니다.

웹3에서 말하는 백엔드는 AWS 같은 클라우드 서버가 아니라 IPFS 같은 프로토콜입니다. 프로토콜 완성도가 익어가는 지금, 개인 개인이 부하(load)로 참여하는 게 아니라 리소스(컴퓨팅 자원 + 스토리지 자원 + 네트워크 자원)로 참여하는 웹3 서비스를 실험할 때입니다.

Posted by ingeeC
,

WebAuthn 스펙은 FIDO 스펙이 진화한 결과입니다.

애플, 구글, MS 등의 업체들이 지지하고 있으며 "패스키(Passkey)"라는 브랜드 네임으로 알려져 있습니다.

WebAuthn 스펙을 정말 잘 설명하고 있는 글이 있어 일부를 번역하여 공유합니다.

그냥 "좋은 글이 있어요"라고 링크만 소개하고 말기에는 아깝다는 생각이 들었습니다.

글의 출처는 https://www.imperialviolet.org/tourofwebauthn/tourofwebauthn.html 입니다.

 

패스워드는 쓰레기입니다

패스워드는 쓰레기입니다. 이 글을 읽는 분이라면 이미 이 생각에 동의하시겠지만, 왜 그런지 다시 한 번 살펴 봅시다.

 

사람들은 보통, 패스워드 몇 개를 여기저기 돌려씁니다.

(랜덤하게 패스워드를 만들어내는 패스워드 매니저라는 도구가 있지만, 사람들이 쓰지 않지요.) 웹사이트는 패스워드의 해시값을 저장하고, 인증할 때 이 해시값을 사용합니다. 그런데 대부분의 패스워드는 엔트로피가 낮아서, 해시값만 유출돼도 무차별 대입 공격에 의해 노출됩니다. (haveibeenpwned.com 사이트에 의하면 대략 800 개 웹사이트에서 135억 개 계정이 유출됐다고 합니다.)

 

패스워드 데이터베이스가 유출되면, 패스워드가 유출된 그 웹사이트만 문제가 되는 게 아닙니다. 패스워드를 여러 곳에서 돌려쓰는 행태 때문에, 다른 웹사이트들도 문제가 됩니다.

 

다음으로, 패스워드는 사람이 기억하기 때문에, 비슷해 보이는 웹사이트로 사람을 속여서 패스워드를 입력하게 할 수 있습니다. 이러한 "피싱(phishing)" 공격은 흔하고 효과적입니다.

 

마지막으로, 패스워드는 소프트웨어 계층 여기저기서 유출될 수 있습니다. 거대 기업 페이스북조차 수억 개의 패스워드를 실수로 로깅(logging)한 적이 있습니다. 그리고 자바스크립트 인젝션 공격은 패스워드를 포함해서 웹사이트에 입력하는 모든 내용을 유출시킬 수 있습니다.

 

더 나은 인증(AuthN)에 관한 이야기

이 글은 공개키 서명 체계(public key signature scheme)를 사용해서 더 나은 인증(authentication) 시스템을 만들려는 노력에 관한 이야기입니다. 공개키 서명은 ECDSA, RSA, ML-DSA 등으로 불립니다. 이는 결과값이 얼마나 큰지, 결과값을 얻는 데 얼마나 오래 걸리는지, (아직 이론적인 이야기지만) 양자 컴퓨터 내성을 얼마나 갖고 있는지에 따른 분류입니다.

 

공개키 서명 체계는 세 가지 연산을 제공합니다.

  1. `generate` 연산은 난수 비트를 받아서 공개키와 개인키라고 불리는 두 개의 바이트 문자열을 반환하는 작업입니다.
  2. `sign` 연산은 개인키와 임의의 바이트 문자열(메시지라고 함)을 받아서 "서명(signature)"이라고 불리는 또 다른 바이트 문자열을 생성하는 작업입니다.
  3. `verify` 연산은 공개키, 메시지, 서명 값을 받아서 해당 서명이 해당 개인키를 사용해서 생성됐는지 검증하는 작업입니다.

공개키 서명 체계가 유용하려면 다음과 같은 속성이 있어야 합니다.

  1. 공개키로부터 개인키를 계산하는 것은 불가능해야 합니다.
  2. 개인키 없이는 서명을 계산할 수 없어야 합니다.

 

공개키 서명을 사용한 인증(AuthN) 방식

다음은 공개키 서명을 사용한 인증(authentication) 방식의 간단히 예입니다.

 

사용자는 username과 password를 만들어 웹사이트에 등록하지 않습니다. 대신 사용자는 웹사이트에 등록하기 위해 usrename을 만든 다음 사용자의 컴퓨터에서 generate 연산을 실행해서 key pair(공개키와 개인키)를 만듭니다. 그리고 사용자의 컴퓨터에 개인키를 저장한 다음, 공개키와 username을 웹사이트에 제출합니다.

 

로그인할 때 사용자는 username을 입력합니다. 그러면 사용자의 컴퓨터가 사용자의 개인키를 사용해서 "let me in" 메시지에 대해 서명 값을 계산합니다. 그리고 username과 서명 값을 웹사이트로 전송합니다. 마지막으로 웹사이트는 사용자가 가입할 때 등록한 공개키를 사용해서 "let me in" 메시지와 제출된 서명을 검증합니다. 서명이 유효하다면 사용자는 로그인됩니다.

 

우리는 방금 데이터베이스 유출 문제를 해결했습니다.

이제 웹사이트는 패스워드 해시 대신 공개키를 저장하면 됩니다. 공개키는 서명을 생성하는 데 사용할 수 없고, 오직 서명을 검증하는 데만 사용됩니다. 따라서 패스워드와 달리, 공개키는 유출되더라도 이를 이용해서 해당 웹사이트나 다른 웹사이트에 로그인할 수 없습니다.

 

피싱 문제가 남았습니다

하지만 피싱(phishing) 문제가 남았습니다. 사람들은 여전히 가짜 웹사이트에 서명 값을 제출할 수 있습니다. 사용자의 서명 값을 알아낸 공격자는 이를 사용해서 해당 사용자인 것처럼 진짜 웹사이트에 로그인할 수 있습니다.

 

피싱 문제를 해결해 봅시다.

 

피싱은 공격자가 사용자의 로그인 정보를 갈취하는 수법입니다. 피해자가 실수로 가짜 웹사이트에 로그인하면, 공격자는 그 정보를 실제 웹사이트에서 재사용합니다. 앞에서 소개한 로그인 방식은 모든 웹사이트가 "let me in"이라는 동일한 메시지를 사용해서 서명을 만들었기 때문에 피싱에 취약했습니다.

 

설계를 수정해 봅시다.

첫 번째로 할 일은 서명할 메시지를 바꾸는 것입니다. 서명할 메시지에 로그인할 웹사이트의 이름을 넣어 봅시다. 그리고 메시지를 JSON 형태로 바꿔 봅시다.

 

사용자가 로그인할 때 사용자의 컴퓨터는 사용자의 개인키를 사용해서 서명 작업을 실행합니다. 하지만 이제 "let me in" 메시지 대신 {"origin": "https://example.com"} 메시지를 사용합니다. 웹사이트는 생성된 서명에 대해 검증 작업을 실행해야 합니다. 검증 작업에는 메시지 입력이 필요하므로 사용자의 컴퓨터에서 서명 및 username과 함께 메시지를 전송하도록 합시다.

 

이제 사용자가 악성 링크를 클릭해서 exampl3.com(악의적인 피싱 웹사이트)에 로그인을 시도할 때 어떤 일이 일어나는지 생각해 봅시다. 사용자의 컴퓨터는 {"origin": "https://exampl3.com"}이라는 메시지에 서명합니다. 피싱 사이트가 이 서명을 갈취해서 진짜 웹사이트에 전달하면 진짜 웹사이트는 사용자의 서명이 다름(다른 origin를 기초로 만들어진 것임)을 인식하고 로그인을 거부합니다. (컴퓨터는 사람과 달라서 URL에서 문자 하나만 바뀌어도 확실하게 감지할 수 있습니다.)

 

피싱 사이트는 메시지를 바꿀 수 없습니다. 메시지를 바꾸더라도 사용자의 개인키가 없기 때문에 유효한 서명을 새로 만들 수 없습니다.

 

서명 값 유출 문제가 남았습니다

이제 피싱 사이트 문제는 해결됐습니다. 하지만, 진짜 웹사이트에서 서명 값이 유출됐을 경우 유출된 서명 값이 사용자 로그인에 사용될 수 있다는 문제는 여전히 남아 있습니다. 패스워드 해시와 달리 서명 값은 저장할 필요가 없습니다. 하지만, 자바스크립트 인젝션 및 부주의한 로깅을 통해 서명 값이 유출될 위험은 있습니다.

 

우리는 피싱 사이트 문제 해결하기 위해 사이트마다 고유한 메시지를 사용했습니다. 이제 서명 값 유출 문제를 해결하기 위해 인증(authentication) 시도마다 고유한 메시지를 사용해 봅시다.

 

두 번째로 할 일은 사용자가 로그인을 시도할 때마다 서명할 메시지를 바꾸는 것입니다.

사용자가 로그인을 시도할 때마다 웹사이트에서 랜덤 챌런지(random challenge) 문자열을 전송해서 서명하게 합시다. 사용자가 로그인을 시도할 때마다 랜덤 챌런지 문자열이 바뀌도록 합시다.

 

이제 서명할 메시지는 다음과 같습니다. 

{"origin": "https://example.com", "challenge": "8065afbaa4faee78123ad2061bc78df3"}.

 

이제 악성 JavaScript나 부주의한 로깅에 때문에 서명 값이 유출되더라도, 그 서명 값은 그 즉시 쓸모를 잃습니다. 인증(authentication)할 때마다 서명할 메시지가 달라지기 때문입니다.

 

전용 하드웨어를 이용하면 보안성이 극대화됩니다

여전히 개인이 얼마나 많은 공개키를 갖게 할지, 그리고 그 공개키를 어디에 저장하게 할지 고민해야 합니다.

 

간단한 답은 한 사람이 하나의 공개 키를 갖고 모든 웹사이트와 앱에서 사용하는 것입니다. 하지만 이 방법은 명백한 문제가 있는데, 그 공개키가 그 사람에 대한 고유한 추적 값이 된다는 점입니다. 사람들은 웹사이트나 앱에서 추적되는 것을 원치 않습니다.

 

지금은 각 웹사이트나 앱이 저마다의 암호키 목록을 갖는다고 가정하겠습니다. 실제로는 이보다 더 복잡하지만, 이후 장에서 자세히 다루겠습니다.

 

패스워드와 달리 개인키는 사용 중 어디에도 전송되지 않습니다. 편의를 위해 전용 하드웨어(보통 USB로 연결)를 이용해서 개인키를 생성하고 보관한다고 가정하겠습니다. 이렇게 하면 보안성이 극대화됩니다. 개인키를 생성하고 보관하는 이런 하드웨어는 어느 정도의 물리적 공격에도 버티도록 설계돼 있습니다.

 

더 나은 인증(AuthN) 시스템

인증(authentication) 시스템의 어쩔 수 없는 한계도 생각해야 합니다.

 

디지털 환경에서 사람들은 항상 컴퓨터를 통해 행동합니다. 사용자 인증(authentication)을 말할 때, 인증을 통해 직접적으로 권한을 얻는 것은 해당 사용자의 컴퓨터입니다. 따라서 해당 컴퓨터가 공격자에 의해 제어된다면 인증 시스템은 무의미해집니다. 인증 문제를 해결한다고 모든 보안 문제가 해결되는 것이 아닙니다. 하지만, 많은 보안 문제가 인증 문제와 관련돼 있습니다. 그렇기 때문에 세상을 바로잡기 위해서는 더 나은 인증 시스템이 필요합니다.

 

이 글의 주제인 WebAuthn이 바로 그런 시스템입니다.

 

패스키는 안전합니다.
패스워드 방식과 달리 기밀한 정보(private key)가 절대 서버로 전달되지 않습니다.


패스키는 사용하기 쉽습니다.
지금도 애플, 구글, MS 등 플랫폼 업체들이 패스키 사용에 필요한 화면을 한 단계라도 더 줄이기 위해 (사용자 편의성을 높이기 위해) 애쓰고 있습니다.


패스키는 표준입니다.
어느 누구도 패스키 기술을 독점할 수 없도록 W3C가 WebAuthn 스펙을 관리합니다.


자신있게 적극적으로 패스키를 사용해서 디지털 일상생활을 보다 더 안전하게 만드시기 바랍니다.

Posted by ingeeC
,

들어가며.
UCAN은 웹3 세상을 위한 Authorization(이후 AuthZ) 기술 입니다.
DID를 이용해서, DID document가 제공하는 pub-key를 인증 수단으로 사용하자는 아이디어가 핵심입니다.

 

웹3를 위한 Access Token, UCAN

 

개요

  • UCAN은 User Controlled AuthZ Network의 약자 (본질은 Access Token)
  • 사용자 데이터의 통제권을 사용자 개인에게 부여하는 기술
  • UCAN의 특징
    • Trustless: UCAN 토큰의 유통 및 권한 행사에 참여하는 누구도 신뢰를 강요하지 않는다 (Trustless한 객체들이 모여 신뢰할 수 있는 결과를 만든다)
    • Secure: 암호 알고리즘이 안전을 보장한다
    • 그리고, local-first, user-originated 하다

 

상세

  • 아이디어의 배경: 탈중앙화된 웹3 환경에서는 기존과 다른 AuthZ 방식을 고민해야 한다
    • ACL을 관리하는 '중앙'이 없기 때문이다
    • AuthZ 관리에 필요한 모든 내용을 포함한 토큰을 이용하면 탈중앙화된 방식으로 권한 관리를 수행할 수 있다 (UCAN은 SPKI와 OCAP/object capability 기술을 참조했다)
  • UCAN 토큰은 영화티켓에 비유할 수 있다
    • 누구도 당신의 신원/Identity을 묻지 않는다
    • 다른 사람에게 티켓을 양도할 수 있다 (이를 위해 극장과 협의할 필요도 없다)
  • UCAN은 자원, 권한, 주체를 명시하기 위해 DID를 사용한다
    • UCAN 규격은 다음 예시와 같다 (Payload 스펙 참조)
      {
        `header`: {
          `alg`: Algorithm, // the type of signature.
          `typ`: Type, // the type of this data structure, JWT.
          `uav`: UCAN version.
        },
        `payload`: {
          `iss`: DID, // Required. Issuer DID (sender)
          `aud`: DID, // Required. Audience DID (receiver)
          `sub`: DID, // Required. Principal that the chain is about (the [Subject])
          `cmd`: String, // Required. The [Command] to eventually invoke
          `args`: {String : Any}, // Required. Any [Arguments] for the Invocation
          `nonce`: Bytes, // Required. Nonce
          `meta`: {String : Any}, // Not Required. [Meta] (asserted, signed data)
          `nbf`: Integer, // Not Required. "Not before" UTC Unix Timestamp
          `exp`: Integer | Null, // Required. Expiration UTC Unix Timestamp
        },
        `signature`: Bytes // A signature (using alg) of the base64 encoded header and payload concatenated together and delimited by '.'
      }
  • UCAN으로 할 수 있는 일
    • Delegation/위임: 권한을 발급, 전달, 제한한다
    • Invocation/사용: 위임된 권한을 행사한다
    • Revocation/철회: UCAN 토큰에 명시된 권한을 철회한다
  • UCAN 토큰 발급과 검증을 위한 다수의 라이브러리가 존재한다

 

Ref.

 

요약.
UCAN은 DID를 기반으로 정의한 탈중앙화 Web3 시대를 위한 억세스 토큰(AuthZ 토큰)입니다.
UCAN이 동작하려면 DID 인프라가 갖춰져 있어야 합니다.

Posted by ingeeC
,

DID-Core 스펙을 요약합니다.
DID-Core 스펙은 2022년 표준화 완료되었습니다 (W3C Recommendation 19 July 2022).
DID는 웹3 세계의 기초를 이루는 기반 기술입니다.

 

Web3를 위한 ID, DID

DID는 `Scheme + DID Method + DID Method-specific ID`로 구성된 문자열이다

  • 예시) did:example:123456789abcdefghi

 

DID는 개념이자 인프라다

  • Key-pair의 유통과 검증을 위해 PKI(인프라)가 존재하는 것처럼, DID와 DID document의 유통과 검증을 위해 DID 인프라가 필요하다
  • 어떤 DID가 있으면 이에 대한 DID document를 가져올 수 있다 (DID Resolution)
  • DID document를 어떻게 저장하고 검색해서 가져오는지는 스펙 범위 밖이다 (마음대로 구현해도 좋다)
  • DID document에는 pub-key 같은 증명수단(verification method)들이 담겨있다 
# DID document 샘플
{
"@context": [
  "https://www.w3.org/ns/did/v1",
  "https://w3id.org/security/suites/ed25519-2020/v1"
]
"id": "did:example:123456789abcdefghi",
"authentication": [{
  "id": "did:example:123456789abcdefghi#keys-1",
  "type": "Ed25519VerificationKey2020",
  "controller": "did:example:123456789abcdefghi",
  "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
}]
}

 

DID method가 DID Resolution 방식을 결정한다

  • DID method에 따라 어떤 종류의 DID는 생성하면 끝이다 (더 이상의 추가 절차가 필요 없다)
  • 어떤 종류의 DID는 생성후 verifiable data registry에 등록하는 절차가 필요하다
  • 다양한 DID method 목록이 DID Methods 목록 문서에 정리되어 있다 (비트코인 기반의 btcr, 이더리움 기반의 ethr, IPFS 기반의 ipid를 눈여겨볼 만하다)

 

결론
요약하자면, DID는 ID로 document를 조회할 수 있는 ID체계입니다.

 

Posted by ingeeC
,

웹브라우저 기반 IPFS 네트워크에 관심이 많습니다.
웹브라우저만으로 IPFS 네트워크를 구축할 수 있다면, 서버 없는 서비스(웹3 서비스)가 가능해집니다.
IPFS 블로그(https://blog.ipfs.tech/)에서 이와 관련된 기사를 골라 요약합니다.

The State of Dapps on IPFS: Trust vs. Verification

https://blog.ipfs.tech/dapps-ipfs/
2024-01-29

  • SPA 또는 MPA 형태로 개발된 Dapp은 IPFS로 쉽게 배포할 수 있다
  • Helia는 브라우저를 IPFS 노드로 만들어주는 라이브러리다
  • Helia가 브라우저에서 제공하는 기능은 'CID 데이터 관리'와 'CID 데이터에 대한 Verified Retrieval' 2가지다
    • CID 데이터 관리: 데이터를 CID 데이터로 만들고 해석하는 기능을 제공한다
    • CID 데이터에 대한 Verified Retrieval: CID로 지정된 데이터를 Bitswap 또는 IPFS Gateway를 통해 가져올 수 있다
    • 브라우저 IPFS 노드는 보통 수명주기가 짧기 때문에, CID 데이터를 업로드할 때는 1) pinning 서비스를 이용하거나, 2)직접 운영하는 IPFS 노드(서버)를 이용하는 것이 좋다

 

Verified IPFS Retrieval in Browsers with @helia/verified-fetch

https://blog.ipfs.tech/verified-fetch/
2024-04-18

  • IPFS Gateway는 브라우저에서 IPFS 데이터를 가져올 때 특히 유용한 기술이다
  • IPFS 데이터에 대한 검증(Verification: IPFS Gateway가 전송한 데이터가 내가 요구한 그 데이터가 맞는가에 대한 검증)을 브라우저가 수행한다면, 브라우저는 IPFS Gateway를 신뢰하지 않더라도 문제 없이 이용할 수 있다 (Trustless Gateway 사용이 가능하다)
  • 이를 위해 Interplanetary Shipyard팀(프로토콜랩으로부터 분사한 개발조직)이 @helia/verified-fetch 라이브러리를 개발/배포한다
  • Shipyard팀의 다음 목표는 WebRTC와 WebTransport 프로토콜을 이용해서 브라우저에서 직접 Kubo IPFS 노드와 통신하는 것이다

 

IPFS on the Web in 2024: Update From Interplanetary Shipyard

https://blog.ipfs.tech/2024-shipyard-improving-ipfs-on-the-web/
2024-11-25

  • 우리(Interplanetary Shipyard)가 관심을 갖는 주제는 웹에서 IPFS를 사용하는 것이다
  • 다시 말해 웹브라우저에서 다른 IPFS 노드에 연결할 수 있게 만드는 것이다
  • 이를 위해 다음과 같은 프로젝트를 진행하고 있다
    • Verified Fetch: 브라우저의 fetch API와 유사한 API를 제공, 이를 통해 IPFS 데이터를 검증/수신하는 기능을 제공한다
    • Browser Transport: 브라우저에서 사용할 수 있는 WebRTC와 WebTransport 프로토콜을 기반으로 외부 IPFS 노드와 통신하는 기능을 제공한다
    • AutoTLS: 브라우저는 보안 통신을 위해 CA 공인 인증서를 요구하나 IPFS 노드는 통상 인증서 없이 운영된다. AutoTLS는 이 갭을 메꾸는 기능을 한다
    • Delegated Routing: 브라우저가 IPFS 기능을 호출할 때 이용할 수 있는 https://delegated-ipfs.dev/routing/v1 엔드포인트를 프로토콜랩이 운영/제공한다

 

Browser P2P Connectivity with WebRTC and js-libp2p

https://docs.libp2p.io/guides/getting-started/webrtc/
2024-06-12

  • 브라우저 p2p 커넥션을 만들려면 서버의 지원이 필요하다
    • STUN: 브라우저 노드의 public ip를 알아내기 위해 필요하다
    • TURN: 공개 IP가 부여된 서버가 브라우저-to-브라우저 통신을 중계한다 (서버 비용이 든다. 이 글에서는 TURN 서버 대신 GossipSub 프로토콜 이용을 추천한다)
    • Signaling: libp2p의 WebRTC 통신 초기 연결을 위해서 필요하다
    • Libp2p relay: 브라우저 노드도 PubSub 프로토콜(GossipSub)을 이용하면 서로 연결될 수 있다 (데모 용도로는 좋으나 배틀 테스트를 거치지 않아서 제품 용도로는 신뢰할 수 없다)
  • GossipSub 프로토콜을 이용한 브라우저 간 libp2p 통신 수립 가이드 (실제 동작하는 데모, 강추!)
    • 스텝1: 소스레포 복사 및 라이브러리 설치
    • 스텝2: js-libp2p node.js relay 실행
    • 스텝3: 브라우저에서 js-libp2p 실행
    • 스텝4: 브라우저에서 relay로 연결
    • 스텝5: Circuit Relay를 이용, 브라우저를 dialable하게 만들기
    • 스텝6: relay를 브라우저 앱의 부트스트랩 피어로 설정
    • 스텝7: WebRTC를 listen하여 direct connection 만들기
    • 스텝8: PubSub 피어 찾기

 

결론
1)인푸라 등에서 제공하는 무료 IPFS 노드와 2)Helia 라이브러리와 3)PubSub(GossipSub) 프로토콜을 이용하면 비용 없이 브라우저-to-브라우저 IPFS 네트워크를 구축하는 것이 가능합니다.
다시 말해, 비용 없이 웹3 서비스를 실현할 수 있습니다. 이제 필요한 건 당신의 상상력입니다.

Posted by ingeeC
,

IPFS Camp 2024 요약

Dev 2024. 12. 12. 11:24

유튜브 세션 모음을 요약합니다.
벨기에 브뤼셀에서 있었던 IPFS Camp 2024 행사 동영상입니다.

3줄 요약

  • IPFS 기술에 대한 이야기보다 블록체인 응용사례에 대한 이야기가 많았다 (다소 실망)
  • 개발 업체가 망했다가 오픈소스로 되살아난 '탈중앙화 인증기술, UCAN'과 개발 활동이 멈췄다가 되살아난 '탈중앙화 DB, OrbitDB'가 흥미로왔다
  • 트위터의 대안 서비스 'BlueSky'가 널리 쓰이는 것 같았다 (BlueSky 계정 소개가 많았다)

TOP3 세션

The State of IPFS in JS

  • 12분 동영상
  • kubo(IPFS go 구현체)와 helia(IPFS js 구현체) 개발팀이 PL에서 Interplanetary Shipyard로 분사했다 (후원 바란다)
  • helia의 성능 지표들이 kubo와 비교해서도 양호하다 (helia를 써라)
  • OrbitDB가 돌아왔다 (한때 개발이 중단됐다가 다시 재개됐으며, Helia를 기반으로 한다)

Decentralised Super app. Local First + Blockchain

  • 17분 동영상
  • 중앙 서버에 의존하는 소셜네트워크는 검열을 피할 수 없다 (Post Cloud 기술에 기반한 소셜네트워크가 필요하다)
  • 오프라인에서도 동작하는 소셜네트워크 데모가 좋았다 소스레포

What's New in UCAN 1.0

  • 22분 동영상
  • Fission 회사가 망했어도 UCAN 스펙은 커뮤니티를 기반으로 지속되고 있다
  • JWT와 UCAN의 관계를 청산해서 문제를 단순화시켰다 (JWT 포맷 대신 IPLD를 이용한다)
  • 관련 자료: Ucanto 소스레포, Ucan 워킹그룹

기타등등

그밖에

  • 과학 분야의 대용량 데이터 스토리지 운영 사례,
  • 게이밍 분야의 블록체인 응용 사례,
  • 법률 분야의 분쟁 해소 자동화 사례
    등이 발표됐으나 흥미롭지 않았다.

(이상입니다)

Posted by ingeeC
,

https://www.youtube.com/playlist?list=PLfW9my7NCey-y5_j6QGCtGoigQuVlZ3Bj

3줄 요약

  • IPFS는 캐즘을 넘는 중이다
  • 중국 발표자가 많았다 (국가 규제를 극복하기 위한 서비스를 실험하는 것 같았다)
  • CAR 파일 포맷과 UCAN 인증 기술에 대한 언급이 많았다

 

TOP3 세션

The State of Helia: IPFS in the Browser

 

IPFS + Browsers: Synergistic Decentralization for the Masses

  • https://www.youtube.com/watch?v=GR-SvYSrslE&list=PLfW9my7NCey-y5_j6QGCtGoigQuVlZ3Bj&index=12
  • 2023-11-23, 25분 동영상
  • 발표자는 브레이브 브라우저 개발자
  • 브레이브가 웹3 브라우저인 이유
    • 멀티체인 월렛이 내장되어 있다
    • ENS/ UD/ SNS/ IPNS 도메인 해석 기능이 내장되어 있다
    • 사용자에게 BAT 인센티브를 준다
    • IPFS node가 내장되어 있다
    • IPFS URL을 HTTP IPFS gateway로 맵핑하는 기능을 기본으로 제공한다

 

Event based Mutability on IPFS

 

기타등등 세션

Opening Session with Boris Mann

 

Privacy-Focused User Access for Consumer dApps with Vijay Krishnavanshi

Web3 서비스 아키텍처

 

Juan Benet of Protocol Labs

 

Working IPFS Systems: A Love/War Story with Hannah Howard

 

Transitioning from Curiosity to Commodity - Mainstreaming IPFS

 

Modelling the Scientific Record as a DAG with Edvard Hübinette

 

A decentralized social graph made with IPNS with Guo Liu

 

Dataverse Computer with Qibing Li

 

Saturn — A new Web3 CDN built on IPFS and Filecoin with Ansgar Grunseid

 

Structured Data with IPLD with Carson Farmer

 

Debox - Enabling More Decentralized Storage Acceptance Among Web2 Users

 

What is Content Addressing & Why is it the 2nd Best Thing in the World?

 

IPFS over Storj Backend

 

Cars and Other Forms of Transportation

 

Boom!

 

Infinite Compression, Zero Knowledge Auth and Merkle Proofs

 

Iroh - Take IPFS to Millions of New Places

Iroh 네트워크 솔루션 소개

 

IPVM - Bringing Wasm-Based Edge Compute to IPFS

 

Indexing Co and The Road to Data 3.0

 

Deploy a dApp to IPFS in less than 15 minutes

 

IPFS Connect Istanbul 2023 Recap Video

 

(이상입니다)

Posted by ingeeC
,

FedCM API (Federated Credential Management API)

개요

  • 웹에서의 사용자 인증을 표준화/간소화하기 위한 기술
  • 브라우저가 idP를 통한 인증을 주관하여 '제3자 쿠키'에 의한 사용자 추적을 방지하는 기술 (프라이버시 강화)
  • 브라우저가 사용자 identity 정보를 관리하여 보안성 강화
  • FedCM API는 브라우저 벤더가 개발하여 브라우저에 탑재하는 것

 

표준화 현황

 

브라우저 지원 현황

  • Can I Use FederatedCredential Now?
  • 일부 브라우저 미지원 (그럼에도 불구하고 전세계 사용자의 75%를 커버)
  • Chrome, Edge, Android 브라우저가 지원 (Safari, Firefox, iOS 브라우저가 미지원)

 

FedCM API를 이용한 인증 Flow

  • OAuth2/OIDC의 'authZ code flow'와 비슷
  • RP와 idP 간의 리다이렉션이 제거됨 (그래서 오류 가능성과 정보 유출 가능성이 낮아짐)

 

원 모어 띵: navigator.credentials.get() 메소드

  • 브라우저에서 일어나는 인증 과정의 시작점
  • get() 메소드에 전달하는 인자만 바꾸면 id/pswd 인증, 소셜 로그인 인증, 패스키 인증, FedCM 인증을 일관되게 처리 가능
  • 다양한 인증 기술들이 제안되고, 실험되다가 종국에는 브라우저로 수렴되는 느낌 (브라우저는 웹3 세계의 OS)

 

Posted by ingeeC
,
웹3 세상에서는 개인이 identity와 data에 대한 통제권을 갖습니다.
그래서 웹3 세상을 열기 위해서는 identity와 data 관리에 대한 고민이 필수적입니다.
그런 맥락에서 현실 세계의 대표적인 identity 관리 방식인 OAuth2와 OpenID Connect을 살펴봅니다.

 

OAuth2 표준과 OpenID Connect 표준

  • OAuth2는 Authorization(이후 authZ)에 대한 표준이다.
  • 반면 OpenID Connect(이후 OIDC)는 Authentication(이후 authN)에 대한 표준이다.
  • OIDC 표준은 OAuth2 표준을 기반으로 정의되었다.

 

OIDC AuthZ code flow

그림1. OAuth2 시퀀스 그림2. OIDC 시퀀스
  • 그림1은 OAuth2 authZ code grant type의 동작 시퀀스다.
  • 그림2는 OIDC authZ code flow의 동작 시퀀스다.
  • 두 시퀀스는 사실상 동일하다. 두 시퀀스의 차이점은 id-provider 서버(그림의 'KEYCLOAK')로부터 받아 오는 토큰이다(양쪽 그림의 5번 'Exchange authZ code...' 화살표).
    • 이때 OAuth2 프로토콜은 Access Token을 발급하고, OIDC 프로토콜은 ID Token을 발급한다.

 

OIDC JWT 표준

  • ID Token의 규격은 OIDC 표준이 정한다.
    • ID Token은 JWT(JSON Web Token) 포맷을 따른다.
  • JWT 토큰에는 토큰 발급자(issuer, 이후 iss)의 priv-key를 이용해서 만든 서명이 포함되어 있어서, 누구나 iss의 pub-key를 이용해서 토큰의 무결성을 검증할 수 있다.
  • Access Token 관련해서는 정해진 규격이 없다.
    • OAuth2 표준은 Access Token의 포맷을 규정하지 않는다. 그래서 어떤 포맷을 사용하더라도 표준에 부합한다.
    • Access Token 포맷으로 JWT를 사용하는 경우가 많다.
  • 관련용어
    • JWT: JSON Web Token
    • JWS: JSON Web Signature
    • JWKS: JSON Web Key Set

 

JWT 토큰 검증

https://jwt.io

https://jwt.io 페이지에서 JWT 포맷으로 발급된 토큰을 검증할 수 있다.

  1. 로컬머신에 OIDC id-provider 서버를 띄우고 JWT 포맷의 Access Token을 발급 받는다.
  2. 발급 받은 토큰을 https://jwt.io/ 에 Copy & Paste 한다.
  3. "Signature Verified" 문구를 확인할 수 있다.
토큰샘플 eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImtlT0tCZGNNdVNGcnhWU0dTZlhBcFNmLXlYR3BRMEFmQmx1YnU4OVJ1R1kifQ.eyJleHAiOjE2OTk1OTY3NjQsImlhdCI6MTY5OTUxMDM2NCwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MzgwIiwic3ViIjoidGVzdC1hY2Nlc3MifQ.psH3-wi6cztRaVaXe0Exh9Aoo_qkvB7_UQhcs1Kzlk8zcLpOZrb20-BLJPs8cV4vlr1jkpm2E_q-cHfAq41ged48zRp0O3bwEPekTinE2T1qfKG3t_8WJu80Wn5Q4d64P8xQCPA8Ly_Q-Q8pRzdmjQBeUK9jZxzEmeqa9BGadna1IHM-WBd7LzCq5pCjS9gkphIy9t5J_bW2f6Nhp67T-VY9gneNy8izTgrja_ulXtifPqHZNaAK7IFFpyJxCvM__3RMOeEFuHYmtmGN7_pT2gT9QJ5cYwGRFbox2V1q95dUfLQWn0nQmC7l1VxOKBRMGcSgGtvvMBu8x-nPalY3gw
JWT 검증OK

잠깐, 뭘로 검증했지?

  • JWT 토큰에 포함된 Signature는 iss의 priv-key를 이용해 만들어진 값이다.
  • 이를 검증하려면 iss의 pub-key가 필요하다.
  • 그런데 JWT 토큰 안에는 iss의 pub-key가 존재하지 않는다. 어디서 가져왔을까?

JWKS URI

JWT 토큰을 검증하려면 iss의 pub-key를 확보해야 한다. 그 절차는 다음과 같다.

  1. 토큰에 포함된 iss 속성값으로부터 well-known URL을 유추한다 (iss + '/.well-known/openid-configuration').
  2. (예시로 든 토큰샘플의 iss는 http://localhost:8380 이다. 이 토큰을 검증해서 Signature Verified 결과를 얻으려면 http://localhost:8380/.well-known/openid-configuration 엔드포인트를 호스팅하는 id-provider가 떠 있어야 한다.)
  3. well-known URL에서 JWKS uri를 확보한다.
  4. JWKS uri에서 iss의 pub-key를 얻을 수 있다.

http://localhost:8380/.well-known/openid-configuration 엔드포인트의 응답

{
  "issuer": "http://localhost:8380",
  "authorization_endpoint": "http://localhost:8380/authz",
  "token_endpoint": "http://localhost:8380/token",
  "userinfo_endpoint": "http://localhost:8380/userinfo",
  "jwks_uri": "http://localhost:8380/jwks"
}

 

http://localhost:8380/jwks 엔드포인트의 응답

{
  "keys": [
    {
      "kty": "RSA",
      "kid": "keOKBdc...",
      "use": "sig",
      "alg": "RS256",
      "e": "AQAB",
      "n": "xPyyJCGj..."
    }
  ]
}

 

Ref

Keycloak Identity and Access Management for Modern Applications (2nd Ed.) 책

Understanding ID Token

How do you choose between OAuth2 and OpenID Connect for web authorization?

JWKs and node-jose

Validate an OpenID Connect JWT using a public key in JWKS

What is OIDC Discovery .well-known end-point?

 

Posted by ingeeC
,

IPFS 2023 컨퍼런스 요약

Dev 2023. 10. 16. 16:27

 

이름만으로 가슴 뛰게 만드는 프로젝트가 있습니다.
IPFS (InterPlanetary File System) 얘기입니다.
지난 4월 벨기에에서 IPFS 2023 컨퍼런스가 열렸습니다.
관련 내용을 요약합니다.

모든 발표 동영상은 유튜브에 올려져있습니다.
https://www.youtube.com/playlist?list=PLuhRWgmPaHtQ-TO65P62tqfUM85HCIqSj

 

IPFS þing 2023 - IPFS on the Web

 

www.youtube.com

 

IPFS on the Web in 2023 (so far) - Dietrich Ayala (30분)

https://youtu.be/dn8PssXkRbY

  • 행사 개요와 연사들을 소개한다
  • Brave 브라우저가 IPFS를 적극 지원하고 있다 - Brave는 IPFS엔진을 내장하고 있다
  • 모바일 IPFS 플랫폼 DURIN을 개발하고 있다 - 모바일에서 IPFS 컨텐츠를 볼 수 있다
  • IPFS를 인공위성에서 운영하는 실험을 하고 있다 - https://github.com/ipfs-shipyard/space

What Is The Web? - Robin Berjon (30분)

https://youtu.be/s878bm15mrk

  • 웹의 형태를 바꾸자 - 지금은 서버가 기능을 제공, 서버에 권력이 있다
  • 2023-03-28에 "IPFS Principles" 표준을 출간했다 - IPFS가 웹의 미래다

A better web: secure, private, p2p apps with user-owned data and identity - Ian Preston, 30분 동영상

https://youtu.be/mSElk2jcFqY

  • 감시와 통제, 아이덴티티, 데이터 소유권에 관한 문제를 해결하고자 Peergos(회사)가 노력하고 있다
  • 서버 없는 REST API, "Sandbox"를 잠깐 언급한다

WNFS: Versioned and Encrypted Data on IPFS - Philipp Krüger (30분)

https://youtu.be/LBMyRp4Ywew

  • fission(회사)가 데이터를 암호화해서 IPFS에 저장하는 서비스를 제공한다
  • 커뮤니티 프로젝트다, 참여하라 - https://github.com/wnfs-wg/

Content Based Addressing and the Web Security Model - Fabrice Desré (40분)

https://youtu.be/H_1JVGDnctI

  • 처음부터 Security를 고려한 파일시스템 Web Tiles를 소개한다
  • Web Tiles는 IPFS와 닮았지만 다르다

Hello Helia - achingbrain (30분)

https://youtu.be/T_FlhkLSgH8

  • js-ipfs와 js-libp2p 메인테이너가 "브라우저 IPFS 구현체"의 미래/마일스톤을 직접 소개한다
  • js-ipfs를 대치하는 Helia가 릴리즈되어 지금 당장 쓸 수 있다 - https://github.com/ipfs/helia

JavaScript performance - how to wring the most out of your Helia deployment - achingbrain (20분)

https://youtu.be/zPeLYosZ3Ak

  • 새로운 "브라우저 IPFS 구현체" Helia의 성능 측정 자료를 공개한다

Connecting everything, everywhere, all at once with libp2p - Prithvi Shahi (20분)

https://youtu.be/4v-iIB0C9_8

  • libp2p 프로토콜로 모든 소프트웨어와 모든 네트워크를 한번에 연결하자
  • libp2p가 QUIC, WebRTC, WebTransport를 어떻게 이용하는지 소개한다
  • 더 알고 싶다면 github를 참조하라 - github.com/libp2p/universal-connectivity

The Incredible Benefits of libp2p + HTTP - Marten Seemann & Marco Munizaga (15분)

https://youtu.be/Ixyo1G2tJZE

The Name Name Service - Blaine Cook (30분)

https://youtu.be/CHiCEd36KtI

  • NNS (Name Name Service)는 탈중앙화된 DNS를 목표로 한다
  • NNS는 DID를 이용한다 - NNS의 Name은 DID가 아니지만, 적어도 1개의 DID를 갖는다
  • Decentralized, Human Readable, Secure 사이의 상충을 보여주는 Zooko's Triangle을 소개한다

Building decentralized websites on IPFS - Ryan Shahine (30분)

https://youtu.be/TeFAHmzvIdg?si=2vGIcNfwYDBi58VV

  • giliam.eth 같은 ENS에 웹사이트를 생성/배포하는 도구를 개발했다 - Portrait
  • Brave 브라우저는 giliam.eth 같은 ENS를 해석/처리할 수 있다

ODD.js, a technical overview - icidasset (10분)

https://youtu.be/ByQbY3lNAck?si=gcAHRhoPqRDysdoy

  • ODD.js는 백엔드가 없는 어플리케이션을 위한 프레임워크다
  • ODD.js는 DID, WNFS, UCAN을 이용한다

IPFS native frontend development using Importmaps - Dilip Shukla (20분)

https://youtu.be/4HY_7DxScMo?si=5dp82haOtmpm3XHk

  • 웹페이지를 위한 package.json 역할을 하는 importmap을 소개한다
  • importmap을 지원하는 jspm 도구를 개발했다 - npm을 대체할 수 있다

Explorations into Decentralized Publishing - David Justice (10분)

https://youtu.be/fn5QNvRXMIo?si=eojMK9sD7jlbuwOb

  • IPFS와 FVM을 이용해서 팀블로그를 만들었다 - GH: meandavejustice/blog-builder
  • IPFS에 호스팅된 SPA 형태의 Viewer와 FVM에서 동작하는 스마트컨트랙트를 이용했다
  • 짧은 발표와 긴 Q&A가 인상적

 


기타 번외로 참조한 IPFS 동영상들을 나열합니다.

How IPFS deals with files - IPFS Camp Workshop

https://youtu.be/Z5zNPwMDYGg

  • 2019-09-18, 1시간 동영상
  • IPFS가 데이터를 다루는 방식을 자세히 소개한다
  • CID와 CID 탐색기를 소개한다 - cid.ipfs.tech
  • DAG와 DAG 빌더를 소개한다 - dag.ipfs.tech

libp2p NAT Hole Punching Success Rate - @dennis-tra - Measuring IPFS

https://youtu.be/fyhZWlDbcyM

  • 2022-08-10, 30분 동영상
  • 방화벽과 NAT 장벽을 넘어 p2p 연결을 달성하는 Hole Punching에 대해 소개한다
  • kubo v0.11 부터 kubo가 릴레이 역할을 함께 수행한다 (kubo는 go-ipfs의 새 이름)

Intro to libp2p: helping with real world application problems - Max Inden

https://www.youtube.com/watch?v=J7ZWbpo2AZk

  • 2022-11-01, 15분 동영상
  • libp2p 프로토콜은 IFPS, Ethereum2, Poladot 등에 적용되어 있다
  • 현재 libp2p 팀은 브라우저에서의 연결성 개선을 위해 노력하고 있다

Browser connectivity state of union and demo

https://youtu.be/qG_1bYVtGO4

  • 2022-11-01, 20분 동영상
  • 브라우저의 문제는 TCP 프로토콜과 QUIC 프로토콜을 쓸 수 없다는 점이다
  • libp2p의 브라우저 연결성 개선에 관하여 WebTransport 프로토콜에 기대를 걸고 있다

libp2p NAT Hole Punching

https://youtu.be/bzL7Y1wYth8

  • 2022-11-01, 30분 동영상
  • Hole Punching 개념과 DCUtR 프로토콜의 개요를 설명한다

WebRTC signalling data over QR codes

https://youtu.be/EQFUPZK9CwI

  • 2022-11-02, 10분 동영상
  • 일련의 QR코드 스트림(동영상)을 이용하여 기기와 기기가 WebRTC 통신을 수행하는 데모를 시연한다 - 재밌음

Why WebRTC

https://youtu.be/ZBIFFuakFHQ

  • 2022-11-02, 10분 동영상
  • libp2p 브라우저 연결성 개선을 위해 시도한 노력의 내용과 현황을 소개한다
  • 아직 완벽하지 않다

이상입니다.

 

Posted by ingeeC
,