Notice
Recent Posts
Recent Comments
Link
Archives
Today
Total
관리 메뉴

카레제육 블로그

GopherCon Korea 2024 - 차량 업데이트 파일의 안전한 관리, 이호민 본문

Daily

GopherCon Korea 2024 - 차량 업데이트 파일의 안전한 관리, 이호민

kare jeyuk 2024. 10. 16. 09:09

 

10월 12일에 이루어진 고퍼콘에 대한 요약 내용이다. 세션에 직접 참여하지는 못했지만 온라인 영상을 통해 내용을 확인할 수 있었다.
세 번째 세션은 42dot 이호민님의 차량 업데이트 파일의 안전한 관리 주제의 발표였다.

차량 업데이트 파일의 안전한 관리

이 세션에서 얻어갈 내용!!

  • 보안 기본 개념 탑재
  • 다양한 용도로 Go를 사용한 사례: UI가 있는 앱을 만드는데 Go를 활용하는 방법

SDV (Software Defined Vehicle)

소프트웨어로 하드웨어를 제어하고 관리하는 자동차를 뜻한다. 소프트웨어를 수시로 업데이트해 성능을 개선하고 앱을 설치해 새로운 기능도 추가하는 스마트폰과 유사한 모습이다.

 

Software OTA update 왜 함?

Seamless 한 사용자 경험, 몇만 대 ~ 몇백만 대의 리콜 비용 절약 (안전과 보안에 관련된 SW 수정 필요의 경우), OTA 시스템이 완벽(bullet proof) 해야 함

 

보안의 3 요소 (CIA Triad)

  • Confidentiality: 업데이트 파일의 암호화
  • Integrity: 업데이트 파일의 무결성 보장
  • Availability: 업데이트 파일에 접근할 수 있어야 함

업데이트 파일의 암호화

golang의 경우 crypto 패키지가 기본 패키지에 내장되어 있다. 때문에 손쉽게 가능하다!

 

위 내용에서 수정이 필요하다.

  • io.Reader, io.Writer 로 입출력 인자를 받는다. 정해진 크기의 버퍼를 사용해 메모리를 절약하기 위함.
    파일 이름으로 받은 파일을 받으면 전부 메모리에 올리게 되는데, 그만큼 인메모리 사용량이 올라가게 된다.
  • Enveloped Encryption

Envelope Encryption

대칭키 암호화

    • 하나의 키로 암호화와 복호화 모두 수행
    • 대량 데이터 암호화, 실시간 통신 등에 주로 사용
    • 대표 알고리즘: AES, DES
    • 장점: 처리 속도가 빠르고 효율적
    • 단점: 키 유출 시 보안 위협

하나의 자동차에 여러 장치들이 있으며, 장치마다 암호화가 된다.

비대칭키 암호화

  • 공개키로 암호화, 개인키로 복호화
  • 키 교환, 디지털 서명, 인증 등에 주로 사용
  • 대표 알고리즘: RSA, ECC
  • 장점: 키 분배와 관리가 더 안전함 (공개키는 노출 가능)
  • 단점: 속도가 느리고 복잡함

이번 사례에서 비대칭키 암호화 방식인 공개키로 파일을 암호화하지 못했는데 그 이유는 차량에서 공개키를 서버에 전달하여 암호화 하는 경우, 런타임에 암호화를 진행하게 된다. 그럼 plain 이미지 파일을 서버에 저장해야하는 위험도 생기며, on-demand 암호화 비용이 많이 나간다. 때문에 큰파일은 대칭키로 암호화해서 미리 스토리지 서버에 올려둔다.

Envelope Encryption

대칭키 암호화 방식과 비대칭키 암호화 방식을 섞은 방법.

  • 대칭키로 암호화 한 바이너리를 스토리지(CDN)에 저장
  • 암호화된 대칭키(KMS)를 스토리지에 저장
  • 클라이언트가 공개키와 함께 업데이트 파일을 서버에 요청
  • 데이터키를 클라이언트의 공개키로 암호화하여 전송
  • 클라이언트에서 데이터키를 복호화해 바이너리 복호화
  • 암호화 되지 않은 데이터키는 사용자에게 유출되지 않게 관리

업데이트 파일의 무결성 보장

공격자의 데이터 변조를 막는 방법

Uptane

CNCF에 등록된 보안 오픈소스 프레임워크로 자동차의 소프트웨어 업데이트 보안을 보장하는 제품이다.

How Uptane Works

Uptane의 무결성을 보장

  • 바이너리와 메타데이터를 미리 생성하여 저장 <- Image Repo.
  • 요청에 따라 메타데이터를 동적 생성 <- Director Repo.
  • 메타데이터를 서명하여 작성자 보장 <- Image/Director Repo.
  • Image 메타와 Director의 메타 비교하여 공격받았는지 감지.

앱 작성 with Svelte

SvelteKit 특징

SvelteKit은 컴파일 중심의 빠른 성능과 서버 사이드 렌더링, 정적 사이트 생성 등 다양한 렌더링 방식을 지원한다. 간결한 문법과 파일 기반 라우팅으로 개발자 경험이 뛰어나며, 다양한 배포 옵션과 유연한 상태 관리를 제공한다. 결과적으로 빠른 로딩, 간편한 개발, 다양한 배포 방식을 통해 효율적인 풀스택 애플리케이션 개발이 가능하다.

CORS (Cross-Origin Resource Sharing)

CORS 에러는 브라우저가 서로 다른 도메인 간의 리소스 요청을 허용하지 않아서 발생하는 문제이다. 이 에러는 주로 웹 애플리케이션이 다른 도메인, 프로토콜 또는 포트에서 리소스를 요청할 때 발생한다.

pkg.go.dev에서 cors를 검색하면 여러 라이브러리가 있다. 또는!!

embed

go:embed 예약어를 통해서 fe_build를 명시하면, 현재 디렉토리의 내용을 다 스태틱하게 넣어준다.

webview

웹서버를 띄우고 웹뷰를 띄워주면 마치 웹서버가 브라우저 처럼 뜬다.

WAILS

크로스 플랫폼 애플리케이션을 go로 만드는 프레임워크