맨위로가기

코드 서명

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

코드 서명은 코드의 출처와 무결성을 보장하기 위해 공개 키와 개인 키 쌍을 사용하여 코드를 서명하는 기술이다. 이는 TLS, SSH와 유사한 방식으로 작동하며, 특히 분산 환경에서 소프트웨어의 보안을 강화하고, 출처를 확인하며, 무결성을 보장하는 데 유용하다. 운영체제, 웹 브라우저, 소프트웨어 업데이트 및 게임 콘솔 등 다양한 분야에서 활용되며, 마이크로소프트 Authenticode, 애플의 Xcode 등과 같은 구현 사례가 존재한다. 코드 서명은 개인 키 관리, 인증서 관리, 사회공학적 공격 등의 한계와 문제점을 가지며, 한국의 전자서명법 개정 및 민간 인증서 확산과 관련된 현황도 존재한다.

더 읽어볼만한 페이지

  • 공개 키 기반 구조 - 루트 인증서
    루트 인증서는 공개 키 기반 구조에서 디지털 인증서의 유효성을 검증하는 최상위 인증서로서, 웹 브라우저와 운영체제가 신뢰하는 목록을 관리하지만, 보안 침해 사례로 인해 사용자들의 적극적인 보안 조치가 필요하다.
  • 공개 키 기반 구조 - 공개 키 암호 방식
    공개 키 암호 방식은 암호화와 복호화에 다른 키를 사용하여 키 분배의 어려움을 해결하고 안전한 통신을 가능하게 하며, RSA 암호나 타원곡선암호 등으로 데이터 암호화, 디지털 서명, 키 교환 등 다양한 분야에 응용되어 전자상거래 및 개인 정보 보호에 기여한다.
  • 응용암호학 - 위키리크스
    위키리크스는 2006년 설립되어 줄리언 어산지가 주도한 비영리 조직으로, 정부와 기업의 기밀 정보를 폭로하는 것을 목표로 하지만 정보 진위 논쟁, 러시아 정부 연루 의혹, 법적 문제 등으로 평가가 엇갈린다.
  • 응용암호학 - 크립토아나키즘
    크립토아나키즘은 암호 기술을 통해 정부의 감시를 회피하고 익명성을 보장하며 자유를 증진하려는 사상으로, 암호화폐와 다크넷 마켓 등에서 활용되며 자유지상주의적 가치를 추구한다.
  • 비디오 게임 문화 - 유튜버
    유튜버는 유튜브에 비디오를 제작 및 게시하는 사람으로, 대한민국에서는 유튜브 크리에이터라고도 불리며 MCN의 등장으로 직업으로 자리 잡았으나, 영향력 증가와 수익 창출에도 불구하고 시장 과점, 수익 불안정성, 영상 조작, 저작권 침해 등 문제점과 비판이 존재한다.
  • 비디오 게임 문화 - 칩튠
    칩튠은 1980년대 개인용 컴퓨터와 게임기의 보급과 함께 등장하여 기술적 한계를 극복하려는 시도에서 비롯된 음악 장르로, 독특한 음색과 기법으로 독립적인 장르로 자리매김하여 현재는 다양한 음악가들과 행사를 통해 활발하게 활동하며 주류 팝 음악에도 영향을 미치고 있다.
코드 서명
코드 서명
코드 서명
코드 서명 프로세스에 대한 높은 수준의 개요를 제공하는 다이어그램
개요
유형디지털 서명
목적소프트웨어 인증
기술적 측면
암호화공개 키 기반 구조
메시지 다이제스트 알고리즘SHA-1
SHA-2
SHA-3
서명 알고리즘RSA (암호)
ECDSA

2. 코드 서명의 작동 원리

코드 서명은 TLS 또는 SSH에서 사용되는 프로세스와 유사하게, 한 쌍의 키(공개 키 및 개인 키)를 사용하여 코드를 서명하는 방법을 제공한다.[5] 개발자는 개인 키를 사용하여 라이브러리나 실행 파일을 서명하며, 이 키는 개발자나 그룹별로 고유하거나 응용 프로그램별로 고유할 수 있다. 개발자는 직접 키를 생성하거나 신뢰할 수 있는 인증 기관(CA)에서 키를 얻을 수 있다.[5]

코드 서명은 자바 애플릿, ActiveX 컨트롤, 활성 웹 및 브라우저 스크립팅 코드 등 주어진 코드 조각의 출처가 즉시 명확하지 않을 수 있는 분산 환경에서 유용하다. 또한 기존 소프트웨어에 안전하게 업데이트 및 패치를 제공하는 데에도 사용된다.[6] 윈도우, macOS, 그리고 대부분의 리눅스 배포판은 코드 서명을 사용하여 악의적인 코드 배포를 방지하고, 업데이트의 정당성을 확인한다.[7]

윈도우 및 macOS에서는 최초 실행 시 소프트웨어를 인증하여 악의적인 조작 여부를 확인하는 데 코드 서명이 사용된다. 리눅스에서는 패키지 관리자가 소프트웨어 배포를 위한 주된 방식이며, 오픈 소스 모델을 통해 소스 코드를 직접 검사할 수 있기 때문에 이러한 형태의 코드 서명은 사용되지 않는다. 데비안 기반 리눅스 배포판(다른 배포판 포함)은 공개 키 암호화를 사용하여 다운로드한 패키지를 검증한다.[8]

2. 1. 키 쌍 생성 및 관리

최초 사용 시 신뢰 모델에서는 개발자가 직접 생성한 키를 제공할 수 있다. 이 경우 사용자는 일반적으로 개발자로부터 직접 공개 키를 얻어 해당 객체가 처음으로 개발자에게서 온 것인지 확인해야 한다. 많은 코드 서명 시스템은 서명 내부에 공개 키를 저장한다. 코드를 실행하기 전에 코드의 서명을 확인하는 일부 소프트웨어 프레임워크 및 운영 체제는 첫 실행 이후부터 해당 개발자를 신뢰하도록 할 수 있다. 애플리케이션 개발자는 설치 프로그램에 공개 키를 포함하는 방식으로 유사한 시스템을 제공할 수 있다. 이렇게 하면 해당 키를 사용하여 업그레이드, 플러그인 또는 다른 애플리케이션과 같이 실행해야 하는 모든 후속 객체가 동일한 개발자에게서 온 것임을 확인할 수 있다.

2. 2. 인증 기관 (CA)의 역할

코드 서명을 인증하는 데 사용되는 공개 키는 보안 공개 키 기반 구조(PKI)를 사용하여 신뢰할 수 있는 루트 인증 기관(CA)으로 추적할 수 있어야 한다. 이는 코드 자체의 신뢰성을 보장하는 것이 아니라, 코드가 명시된 출처(또는 특정 개인 키)에서 왔다는 것을 보장한다.[9] CA는 루트 신뢰 수준을 제공하며, 프록시를 통해 다른 사람에게 신뢰를 할당할 수 있다. 사용자가 CA를 신뢰하면 해당 CA 또는 그 프록시 중 하나에서 생성된 키로 서명된 코드의 정당성을 신뢰할 수 있다.

많은 운영 체제와 프레임워크는 하나 이상의 인증 기관에 대한 내장된 신뢰를 포함하고 있다. 또한 대규모 조직에서는 공개 CA와 동일한 기능을 제공하지만, 조직 내에서만 신뢰되는 조직 내부의 개인 CA를 구현하는 것도 일반적이다.

2. 2. 1. 확장 유효성 검사 (EV) 코드 서명

확장 유효성 검사(EV) 코드 서명 인증서는 CA/B 포럼의 기본 요구 사항 및 확장 유효성 검사 지침을 기반으로 하며, 추가적인 유효성 검사 및 기술 요구 사항을 적용받는다. EV 코드 서명 지침은 "가입자의 개인 키는 FIPS 140-2 레벨 2의 요구 사항을 충족하거나 초과하는 암호화 모듈에서 생성, 저장 및 사용되어야 한다"고 규정한다.[10]

Windows 10 커널 모드 드라이버 서명과 같은 특정 애플리케이션에는 EV 코드 서명 인증서가 필요하다.[11] 또한, 마이크로소프트(Microsoft)의 IEBlog는 EV 코드 서명 인증서로 서명된 Windows 프로그램은 해당 파일이나 게시자에 대한 사전 평판이 없더라도 즉시 SmartScreen 평판 서비스와 평판을 구축할 수 있다고 명시한다.[12]

다음은 SSL.com에서 소프트웨어 서명에 사용한 디코딩된 EV 코드 서명 인증서의 예시이다.

```

인증서:

데이터:

버전: 3 (0x2)

일련 번호:

59:4e:2d:88:5a:2c:b0:1a:5e:d6:4c:7b:df:35:59:7d

서명 알고리즘: sha256WithRSAEncryption

발급자:

commonName = SSL.com EV Code Signing Intermediate CA RSA R3

organizationName = SSL Corp

localityName = 휴스턴

stateOrProvinceName = 텍사스

countryName = US

유효 기간

시작 날짜: 2019년 8월 30일 20:29:13 GMT

종료 날짜: 2022년 11월 12일 20:29:13 GMT

주체:

1.3.6.1.4.1.311.60.2.1.3 = US

1.3.6.1.4.1.311.60.2.1.2 = 네바다

streetAddress = 3100 Richmond Ave Ste 503

businessCategory = 민간 단체

postalCode = 77098

commonName = SSL Corp

serialNumber = NV20081614243

organizationName = SSL Corp

localityName = 휴스턴

stateOrProvinceName = 텍사스

countryName = US

주체 공개 키 정보:

공개 키 알고리즘: rsaEncryption

공개 키: (2048 비트)

모듈러스:

00:c3:e9:ae:be:d7:a2:6f:2f:24 ...

지수: 65537 (0x10001)

X509v3 확장:

X509v3 권한 키 식별자:

keyid:36:BD:49:FF:31:2C:EB:AF:6A:40:FE:99:C0:16:ED:BA:FC:48:DD:5F

권한 정보 접근:

CA 발급자 - URI:http://www.ssl.com/repository/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crt

OCSP - URI:http://ocsps.ssl.com

X509v3 인증서 정책:

정책: 2.23.140.1.3

정책: 1.2.616.1.113527.2.5.1.7

정책: 1.3.6.1.4.1.38064.1.3.3.2

CPS: https://www.ssl.com/repository

X509v3 확장 키 사용법:

코드 서명

X509v3 CRL 배포 지점:

전체 이름:

URI:http://crls.ssl.com/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crl

X509v3 주체 키 식별자:

EC:6A:64:06:26:A7:7A:69:E8:CC:06:D5:6F:FA:E1:C2:9A:29:79:DE

X509v3 키 사용법: critical

디지털 서명

서명 알고리즘: sha256WithRSAEncryption

17:d7:a1:26:58:31:14:2b:9f:3b ...

```

SSL.com EV Code Signing Intermediate CA RSA R3가 발급자(Issuer)의 commonName으로 표시되어 있으며, 이것이 EV 코드 서명 인증서임을 나타낸다. 인증서의 Subject 필드는 SSL Corp를 조직으로 설명한다. Code Signing은 유일한 X509v3 확장 키 사용법으로 표시된다.

2. 3. 타임스탬핑

타임스탬핑은 만료된 인증서의 경우 나타나는 신뢰 경고를 우회하도록 설계되었다. 타임스탬핑은 코드의 신뢰를 인증서의 유효 기간 이후까지 연장한다.[13]

인증서가 손상으로 인해 폐기되어야 하는 경우, 손상 사건의 특정 날짜와 시간이 폐기 기록의 일부가 된다. 이 경우, 타임스탬핑은 코드가 인증서가 손상되기 전 또는 후에 서명되었는지를 확인하는 데 도움이 된다.[13]

3. 코드 서명의 이점

코드 서명은 소프트웨어의 출처와 무결성을 보장하여 보안을 강화하고 사용자에게 신뢰를 제공한다. 코드 서명의 주요 이점은 다음과 같다.


  • 보안 강화: 공개 키와 개인 키 쌍을 사용하여 악의적인 코드 배포를 방지하고 소프트웨어의 안전한 업데이트 및 패치를 보장한다.
  • 출처 확인: 자바 애플릿, ActiveX 컨트롤과 같이 코드 출처가 불분명한 경우에도 소프트웨어 출처를 명확히 확인할 수 있다.
  • 무결성 보장: 소프트웨어가 배포 과정에서 변조되지 않았음을 보장하며, 타임스탬핑을 통해 인증서 만료 후에도 코드 신뢰성을 유지한다.


이러한 이점은 윈도우, macOS와 같은 운영체제에서 코드 서명을 통해 소프트웨어 안전성을 강화하는 기반을 제공한다.

3. 1. 보안 강화

코드 서명은 TLS 또는 SSH에서 사용되는 방식과 유사하게, 공개 키와 개인 키 한 쌍을 사용하여 코드를 서명한다. 예를 들어, .NET의 경우 개발자는 빌드할 때마다 개인 키를 사용하여 라이브러리나 실행 파일을 서명한다. 이 키는 개발자나 그룹별로 고유하며, 때로는 응용 프로그램이나 개체별로 고유하다. 개발자는 직접 키를 생성하거나 신뢰할 수 있는 인증 기관(CA)에서 얻을 수 있다.[5]

코드 서명은 특히 코드 출처가 불분명한 분산 환경에서 유용하다. 자바 애플릿, ActiveX 컨트롤, 활성 웹 및 브라우저 스크립팅 코드가 그 예시이다. 또한 기존 소프트웨어에 안전하게 업데이트 및 패치를 제공하는 데에도 사용된다.[6] 윈도우, macOS, 그리고 대부분의 리눅스 배포판은 코드 서명을 사용하여 악의적인 코드 배포를 방지한다. 이를 통해 운영 체제는 업데이트가 합법적인지 확인할 수 있다.[7]

코드 서명은 윈도우 및 macOS에서 소프트웨어 최초 실행 시 소프트웨어를 인증하여 악의적인 조작 여부를 확인한다. 리눅스에서는 이러한 코드 서명이 사용되지 않는데, 이는 플랫폼의 분산된 특성, 패키지 관리자가 소프트웨어 배포의 주요 방식이며, 오픈 소스 모델로 소스 코드를 직접 검사할 수 있기 때문이다. 데비안 기반 리눅스 배포판(다른 배포판 포함)은 공개 키 암호화를 사용하여 다운로드한 패키지를 검증한다.[8]

코드 서명에 사용되는 공개 키는 보안 공개 키 기반 구조(PKI)를 통해 신뢰할 수 있는 루트 인증 기관(CA)으로 추적할 수 있어야 한다. 이는 코드 자체의 신뢰성을 보장하는 것이 아니라, 코드가 명시된 출처(또는 특정 개인 키)에서 온 것임을 보장한다.[9] CA는 루트 신뢰 수준을 제공하고 프록시를 통해 다른 사람에게 신뢰를 할당할 수 있다. 사용자가 CA를 신뢰하면 해당 CA 또는 그 프록시 중 하나에서 생성된 키로 서명된 코드의 정당성을 신뢰할 수 있다.

확장 유효성 검사(EV) 코드 서명 인증서는 추가적인 유효성 검사 및 기술 요구 사항을 적용받는다. EV 코드 서명 지침은 "가입자의 개인 키는 FIPS 140-2 레벨 2의 요구 사항을 충족하거나 초과하는 암호화 모듈에서 생성, 저장 및 사용되어야 한다"고 규정한다.[10]

Windows 10 커널 모드 드라이버 서명과 같은 특정 애플리케이션에는 EV 코드 서명 인증서가 필요하다.[11] 또한, 마이크로소프트(Microsoft)의 IEBlog는 EV 코드 서명 인증서로 서명된 Windows 프로그램은 SmartScreen 평판 서비스와 즉시 평판을 구축할 수 있다고 명시한다.[12]

3. 2. 출처 확인

코드 서명은 자바 애플릿, ActiveX 컨트롤, 활성 웹 및 브라우저 스크립팅 코드와 같이 주어진 코드 조각의 출처가 즉시 명확하지 않을 수 있는 분산 환경에서 특히 유용하다. 또한 기존 소프트웨어에 안전하게 업데이트 및 패치를 제공하는 데에도 중요한 역할을 한다.[6] 윈도우 및 대부분의 리눅스 배포판은 코드 서명을 사용하여 다른 사람이 패치 시스템을 통해 악의적인 코드를 배포하는 것을 방지한다. 이를 통해 운영 체제는 업데이트가 합법적인지 확인할 수 있다.[7]

코드 서명은 윈도우 및 macOS에서 소프트웨어 최초 실행 시 소프트웨어를 인증하여, 타사 배포자 또는 다운로드 사이트에 의해 악의적으로 조작되지 않았는지 확인한다. 리눅스에서는 이러한 형태의 코드 서명이 사용되지 않는데, 이는 플랫폼의 분산된 특성과 패키지 관리자가 소프트웨어 배포의 주요 방식이며, 오픈 소스 모델을 통해 소스 코드를 직접 검사할 수 있기 때문이다. 데비안 기반 리눅스 배포판(다른 배포판 포함)은 공개 키 암호화를 사용하여 다운로드한 패키지를 검증한다.[8]

코드 서명을 인증하는 데 사용되는 공개 키는 보안 공개 키 기반 구조(PKI)를 사용하여 신뢰할 수 있는 루트 인증 기관(CA)으로 추적할 수 있어야 한다. 이는 코드 자체를 신뢰할 수 있다는 것을 보장하지 않고, 단지 코드 자체를 명시된 출처(또는 특정 개인 키)에서 가져온다는 것을 보장한다.[9]

3. 3. 무결성 보장

코드 서명은 TLS 또는 SSH에서 사용되는 방식과 유사하게, 공개 키 및 개인 키 한 쌍을 사용하여 코드에 서명한다. 개발자는 개인 키를 사용하여 라이브러리나 실행 파일에 서명하며, 이 키는 개발자, 그룹별로 고유하거나 응용 프로그램별로 고유할 수 있다. 개발자는 직접 키를 생성하거나 신뢰할 수 있는 인증 기관(CA)에서 얻을 수 있다.[5]

코드 서명은 자바 애플릿, ActiveX 컨트롤, 활성 웹 및 브라우저 스크립팅 코드와 같이 분산 환경에서 코드 출처가 불분명할 때 유용하다. 또한 기존 소프트웨어에 안전하게 업데이트 및 패치를 제공하는 데에도 사용된다.[6] 윈도우 및 대부분의 리눅스 배포판은 코드 서명을 사용하여 악의적인 코드 배포를 방지하고, 운영 체제가 업데이트의 합법성을 확인하도록 돕는다.[7]

윈도우 및 macOS는 소프트웨어 최초 실행 시 코드 서명을 통해 소프트웨어를 인증하여 악의적인 조작 여부를 확인한다. 리눅스에서는 플랫폼의 분산된 특성과 패키지 관리자가 소프트웨어 배포의 주요 방식이며, 오픈 소스 모델로 소스 코드 검사가 가능하다는 점 때문에 이러한 형태의 코드 서명이 사용되지 않는다. 데비안 기반 리눅스 배포판(다른 배포판 포함)은 공개 키 암호화를 사용하여 다운로드한 패키지를 검증한다.[8]

확장 유효성 검사(EV) 코드 서명 인증서는 추가적인 유효성 검사 및 기술 요구 사항을 적용받는다. EV 코드 서명 지침은 "가입자의 개인 키는 FIPS 140-2 레벨 2의 요구 사항을 충족하거나 초과하는 암호화 모듈에서 생성, 저장 및 사용되어야 한다"고 규정한다.[10]

Windows 10 커널 모드 드라이버 서명과 같은 특정 애플리케이션에는 EV 코드 서명 인증서가 필요하다.[11] 또한, 마이크로소프트(Microsoft)의 IEBlog는 EV 코드 서명 인증서로 서명된 Windows 프로그램은 SmartScreen 평판 서비스와 즉시 평판을 구축할 수 있다고 명시한다.[12]

타임스탬핑은 만료된 인증서의 신뢰 경고를 우회하도록 설계되었으며, 코드의 신뢰를 인증서의 유효 기간 이후까지 연장한다.[13] 인증서가 손상으로 인해 폐기되어야 하는 경우, 손상 사건의 날짜와 시간이 폐기 기록의 일부가 되며, 타임스탬핑은 코드가 인증서 손상 전후에 서명되었는지 확인하는 데 도움이 된다.[13]

4. 코드 서명의 활용

App Store에 앱을 업로드하거나 실제 기기에서 실행하기 전에 개발자는 iOS 및 tvOS 앱에 서명해야 한다. 이는 개발자가 유효한 애플 개발자 ID를 소유하고 있음을 증명하기 위해 필요하다. 애플리케이션이 기기에서 실행되려면 유효한 프로파일 또는 인증서가 필요하다.[14]

휴대용 게임 콘솔과 같은 소비자 기기에서 "서명되지 않은 코드"는 일반적으로 소프트웨어가 실행되기 위해 필요한 암호화 키로 서명되지 않은 응용 프로그램을 의미한다. 대부분의 콘솔 게임은 콘솔 제작자가 설계한 비밀 키로 서명해야 하며, 그렇지 않으면 콘솔에서 게임이 로드되지 않는다. 이는 벤더 종속을 시행하고 소프트웨어 불법 복제를 방지하기 위함이다. 서명되지 않은 코드를 실행하는 방법에는 소프트웨어 익스플로잇, 모드칩 사용, 스왑 트릭, 소프트모드 실행 등이 있다.

Xbox에서 서명된 응용 프로그램을 다른 DVD에 복사해도 부팅되지 않는 이유는 Xbox 실행 파일(XBE)에 부팅 가능한 미디어 유형을 지정하는 미디어 유형 플래그가 있기 때문이다. 거의 모든 Xbox 소프트웨어에서 이 플래그는 실행 파일이 공장에서 제작된 디스크에서만 부팅되도록 설정되어 있어, 실행 파일을 구울 수 있는 미디어에 복사하는 것만으로도 소프트웨어 실행을 막을 수 있다. 그러나 실행 파일이 서명되어 있으므로 플래그 값을 변경할 수 없다. 플래그 값을 변경하면 실행 파일의 서명이 변경되어 확인 시 유효성 검사에 실패하기 때문이다.

4. 1. 운영체제 보안

코드 서명은 TLS 또는 SSH에서 사용되는 프로세스와 유사하게, 한 쌍의 키(공개 키 및 개인 키)를 사용하여 코드를 서명하는 방법을 제공한다.[5] 코드 서명은 특히 자바 애플릿, ActiveX 컨트롤과 기타 활성 웹 및 브라우저 스크립팅 코드와 같이 주어진 코드 조각의 출처가 즉시 명확하지 않을 수 있는 분산 환경에서 유용하다. 또 다른 중요한 용도는 기존 소프트웨어에 안전하게 업데이트 및 패치를 제공하는 것이다.[6]

윈도우, macOS, 그리고 대부분의 리눅스 배포판은 코드 서명을 사용하여 다른 사람이 패치 시스템을 통해 악의적으로 코드를 배포하는 것을 방지한다. 이를 통해 수신 운영 체제는 업데이트가 타사 또는 물리적 매체(디스크)를 통해 제공된 경우에도 업데이트가 합법적인지 확인할 수 있다.[7] 윈도우 및 macOS에서 코드 서명은 최초 실행 시 소프트웨어를 인증하는 데 사용되어, 타사 배포자 또는 다운로드 사이트에 의해 소프트웨어가 악의적으로 조작되지 않았는지 확인한다.

리눅스에서는 해당 플랫폼의 분산된 특성, 패키지 관리자가 (업데이트 및 패치뿐만 아니라) 모든 형태의 소프트웨어 배포를 위한 지배적인 방식이기 때문에 이러한 형태의 코드 서명은 사용되지 않는다. 또한, 원하는 경우 소스 코드를 직접 검사할 수 있는 오픈 소스 모델도 있다. 데비안 기반 리눅스 배포판(다른 배포판 포함)은 공개 키 암호화를 사용하여 다운로드한 패키지를 검증한다.[8]

개발자는 실제 기기에서 앱을 실행하거나 App Store에 업로드하기 전에 iOS 및 tvOS 앱에 서명해야 한다. 이는 개발자가 유효한 애플 개발자 ID를 소유하고 있음을 증명하기 위해 필요하다. 애플리케이션은 기기에서 실행될 수 있도록 유효한 프로파일 또는 인증서가 필요하다.[14]

마이크로소프트는 Authenticode를 기반으로 하는 코드 서명 형태를 구현한다. 이는 마이크로소프트에서 테스트한 드라이버에 대해 적용된다. 드라이버는 커널에서 실행되므로 시스템을 불안정하게 만들거나 시스템에 보안 허점을 열 수 있다. 이러한 이유로 마이크로소프트는 WHQL 프로그램에 제출된 드라이버를 테스트한다. 드라이버가 통과하면 마이크로소프트는 해당 드라이버 버전을 안전한 것으로 서명한다. 32비트 시스템의 경우에만, 마이크로소프트에서 유효성을 검사하지 않은 드라이버를 설치할 수 있으며, 이때 코드가 서명되지 않았다는 경고 프롬프트에서 설치를 허용하는 데 동의해야 한다. .NET(관리형) 코드의 경우, 인증서와 반대로 공개/개인 키 및 SHA-1 해시를 사용하는 강력한 이름 서명이라는 추가적인 메커니즘이 있다. 그러나 마이크로소프트는 Authenticode를 대체하는 것으로 강력한 이름 서명에 의존하는 것을 권장하지 않는다.[17]

4. 2. 웹 브라우저 보안

코드 서명은 자바 애플릿, ActiveX 컨트롤, 기타 활성 웹 및 브라우저 스크립팅 코드와 같이 코드 출처가 불분명한 분산 환경에서 유용하다. 또한 기존 소프트웨어에 안전하게 업데이트 및 패치를 제공하는 데에도 중요한 역할을 한다.[6] 윈도우, macOS, 그리고 대부분의 리눅스 배포판은 코드 서명을 사용하여 다른 사람이 패치 시스템을 통해 악의적인 코드를 배포하는 것을 방지한다. 이를 통해 수신 운영 체제는 업데이트가 타사나 물리적 매체(디스크)를 통해 제공된 경우에도 합법적인지 확인할 수 있다.[7]

코드 서명은 윈도우 및 macOS에서 최초 실행 시 소프트웨어를 인증하는 데 사용되어, 타사 배포자나 다운로드 사이트에 의해 소프트웨어가 악의적으로 조작되지 않았는지 확인한다. 리눅스에서는 이러한 형태의 코드 서명이 사용되지 않는데, 이는 플랫폼의 분산된 특성, 패키지 관리자가 모든 형태의 소프트웨어 배포를 위한 지배적인 방식이기 때문이며, 원하는 경우 소스 코드를 직접 검사할 수 있는 오픈 소스 모델도 있기 때문이다. 데비안 기반 리눅스 배포판(다른 배포판 포함)은 공개 키 암호화를 사용하여 다운로드한 패키지를 검증한다.[8]

4. 3. 소프트웨어 업데이트 및 패치

코드 서명은 기존 소프트웨어에 업데이트 및 패치를 안전하게 제공하는 데 사용된다.[6] 윈도우, macOS, 그리고 대부분의 리눅스 배포판은 코드 서명을 사용하여 다른 사람이 패치 시스템을 통해 악의적인 코드를 배포하는 것을 방지한다. 이를 통해 수신 운영 체제는 업데이트가 타사 또는 물리적 매체(디스크)를 통해 제공된 경우에도 업데이트가 합법적인지 확인할 수 있다.[7]

코드 서명은 윈도우 및 macOS에서 최초 실행 시 소프트웨어를 인증하여, 타사 배포자 또는 다운로드 사이트에 의해 소프트웨어가 악의적으로 조작되지 않았는지 확인한다. 이러한 형태의 코드 서명은 리눅스에서는 사용되지 않는데, 그 이유는 해당 플랫폼의 분산된 특성과 패키지 관리자가 (업데이트 및 패치뿐만 아니라) 모든 형태의 소프트웨어 배포를 위한 지배적인 방식이기 때문이며, 원하는 경우 소스 코드를 직접 검사할 수 있는 오픈 소스 모델도 있기 때문이다. 데비안 기반 리눅스 배포판(다른 배포판 포함)은 공개 키 암호화를 사용하여 다운로드한 패키지를 검증한다.[8]

4. 4. 게임 콘솔 보안

휴대용 게임 콘솔과 같은 소비자 기기에서 "서명되지 않은 코드"는 소프트웨어가 일반적으로 실행되기 위해 필요한 암호화 키로 서명되지 않은 응용 프로그램을 의미한다. 대부분의 콘솔 게임은 콘솔 제작자가 설계한 비밀 키로 서명해야 하며, 그렇지 않으면 게임이 콘솔에서 로드되지 않는다. 이는 벤더 종속을 시행하고 소프트웨어 불법 복제를 방지하기 위함이다. 서명되지 않은 코드를 실행하는 방법에는 소프트웨어 익스플로잇, 모드칩 사용, 스왑 트릭, 소프트모드 실행 등이 있다.

서명된 응용 프로그램을 다른 DVD에 복사하는 것만으로는 부팅되지 않는 이유는 Xbox 실행 파일(XBE)에 XBE가 부팅 가능한 미디어 유형을 지정하는 미디어 유형 플래그가 있기 때문이다. 거의 모든 Xbox 소프트웨어에서 이 플래그는 실행 파일이 공장에서 제작된 디스크에서만 부팅되도록 설정되어 있어, 실행 파일을 구울 수 있는 미디어에 복사하는 것만으로는 소프트웨어 실행을 막을 수 있다.

그러나 실행 파일이 서명되어 있으므로 플래그 값을 변경할 수 없다. 플래그 값을 변경하면 실행 파일의 서명이 변경되어 확인 시 유효성 검사에 실패하기 때문이다.

5. 코드 서명의 한계 및 문제점

코드 서명은 다른 보안 조치와 마찬가지로 무력화될 수 있다. 사용자는 서명되지 않은 코드를 실행하도록 속거나, 유효성 검사를 통과하지 못하는 코드를 실행하도록 유도될 수 있다. 코드 서명 시스템은 개인 키가 비공개로 유지될 때만 안전하다.[15][16]

코드 서명은 소프트웨어 작성자의 악의적인 활동이나 의도하지 않은 버그로부터 최종 사용자를 보호하지 않는다. 이는 단지 소프트웨어가 작성자 외 다른 사람에 의해 수정되지 않았음을 보장할 뿐이다. 샌드박스 시스템은 때때로 잘못된 타임스탬프나 과다 사용을 이유로 인증서를 허용하지 않기도 한다.

5. 1. 개인 키 관리

코드 서명은 개인 키가 비공개로 유지될 때만 시스템을 안전하게 보호한다.[15][16] 사용자는 서명되지 않은 코드를 실행하도록 속거나, 유효성 검사를 통과하지 못하는 코드를 실행하도록 유도될 수 있다.

코드 서명은 소프트웨어 작성자의 악의적인 활동이나 의도치 않은 버그로부터 최종 사용자를 보호해주지 않는다. 이는 단지 소프트웨어가 작성자 외 다른 사람에 의해 수정되지 않았음을 보장할 뿐이다. 샌드박스 시스템은 때때로 잘못된 타임스탬프나 과다 사용을 이유로 인증서를 허용하지 않기도 한다.

5. 2. 인증서 관리

타임스탬핑은 만료된 인증서에서 나타나는 신뢰 경고를 우회하도록 설계되었다. 타임스탬핑은 코드의 신뢰를 인증서의 유효 기간 이후까지 연장한다.[13]

인증서가 손상되어 폐기되어야 하는 경우, 손상 사건의 특정 날짜와 시간이 폐기 기록의 일부가 된다. 이 경우 타임스탬핑은 코드가 인증서가 손상되기 전 또는 후에 서명되었는지를 확인하는 데 도움이 된다.[13]

5. 3. 사회공학적 공격

코드 서명은 다른 보안 조치와 마찬가지로 무력화될 수 있다. 사용자는 서명되지 않은 코드를 실행하도록 속거나, 심지어 유효성 검사를 통과하지 못한 코드를 실행하도록 속을 수 있다. 시스템은 개인 키가 비공개로 유지되는 한에서만 안전하다.[15][16]

코드 서명은 소프트웨어 작성자의 악의적인 활동이나 의도하지 않은 버그로부터 최종 사용자를 보호하지 않는다. 이는 단지 소프트웨어가 작성자가 아닌 다른 사람에 의해 수정되지 않았음을 보장할 뿐이다. 때때로 샌드박스 시스템은 잘못된 타임스탬프나 과다 사용을 이유로 인증서를 허용하지 않기도 한다.

6. 한국의 코드 서명 현황

(이전 출력 결과와 원본 소스가 모두 비어있어 수정할 내용이 없음)

7. 구현 사례

마이크로소프트와 애플 등 주요 IT 기업들은 코드 서명을 통해 소프트웨어의 무결성과 보안을 강화하고 있다. CA/브라우저 포럼은 2023년 6월 1일부터 코드 서명 인증서의 개인 키를 특정 조건을 만족하는 하드웨어에 저장하도록 의무화하여 보안 강화를 추진하고 있다.[18]

7. 1. 마이크로소프트 Authenticode

마이크로소프트는 자체 테스트를 거친 드라이버에 대해 Authenticode 기반 코드 서명 방식을 구현한다. 드라이버는 커널에서 실행되므로 시스템 불안정이나 보안 취약점을 야기할 수 있다. 이러한 이유로 마이크로소프트는 WHQL 프로그램에 제출된 드라이버를 테스트한다. 드라이버가 테스트를 통과하면 마이크로소프트는 해당 드라이버 버전을 안전한 것으로 서명한다. 32비트 시스템의 경우에만 마이크로소프트에서 유효성을 검사하지 않은 드라이버를 설치할 수 있으며, 설치를 위해서는 코드 서명이 없다는 경고 메시지에 동의해야 한다. .NET(관리형) 코드의 경우, 인증서와 반대로 공개/개인 키 및 SHA-1 해시를 사용하는 강력한 이름 서명이라는 추가적인 메커니즘이 있다. 그러나 마이크로소프트는 Authenticode를 대체하는 것으로 강력한 이름 서명에 의존하는 것을 권장하지 않는다.[17]

CA/브라우저 포럼의 코드 서명 실무 그룹은 2023년 6월 1일부터 모든 코드 서명 인증서(EA 인증서뿐만 아니라)의 개인 키를 FIPS 140-2 레벨 2 이상 또는 Common Criteria EAL 4+를 준수하는 하드웨어 암호화 모듈과 같은 물리적 매체에 저장하도록 의무화했다.[18] CA는 이 결정에 대한 준수 발표를 이후에 발표했다.[19][20][21][22][23][24][25]

7. 2. 애플 코드 서명 (Xcode)

개발자는 실제 기기에서 앱을 실행하거나 App Store에 업로드하기 전에 iOS 및 tvOS 앱에 서명해야 한다. 이는 개발자가 유효한 애플 개발자 ID를 소유하고 있음을 증명하기 위해 필요하다. 애플리케이션은 기기에서 실행될 수 있도록 유효한 프로파일 또는 인증서가 필요하다.[14]

참조

[1] 웹사이트 Introduction to Code Signing (Windows) https://learn.micros[...] 2017-08-15
[2] 웹사이트 WebWish: Our Wish is Your Command https://archive.org/[...]
[3] 웹사이트 A Complete overview of Trusted Certificates - CABForum https://www.cabforum[...] 2015-02-26
[4] 웹사이트 Securing your Private Keys as Best Practice for Code Signing Certificates https://www.thawte.c[...]
[5] 웹사이트 What is Code Signing? https://www.instants[...] 2011-06-17
[6] 웹사이트 Digital Signatures and Windows Installer - Win32 apps https://learn.micros[...] 2021-01-07
[7] 웹사이트 Windows Secure Boot Key Creation and Management Guidance https://learn.micros[...] 2022-05-18
[8] 웹사이트 SecureApt - Debian Wiki https://wiki.debian.[...] 2019-05-07
[9] 웹사이트 Code signing https://casecurity.o[...] 2014-02-26
[10] 웹사이트 Guidelines For The Issuance And Management Of Extended Validation Code Signing Certificates https://cabforum.org[...] CA/Browser Forum 2019-12-04
[11] 웹사이트 Driver Signing Policy https://docs.microso[...] Microsoft 2019-12-09
[12] 웹사이트 Microsoft SmartScreen & Extended Validation (EV) Code Signing Certificates https://blogs.msdn.m[...] Microsoft 2019-12-09
[13] 웹사이트 Code Signing https://casecurity.o[...] CASC 2014-02-21
[14] 웹사이트 Distributing your app to registered devices https://docs.develop[...] 2024-01-15
[15] 웹사이트 Fake antivirus solutions increasingly have stolen code-signing certificates http://blog.trendmic[...] 2014-01-09
[16] 웹사이트 Theres-A-Racket-Brewing-In-the-Code-Signing-Cert-Business/ http://www.eweek.com[...]
[17] 웹사이트 .NET Security Blog https://learn.micros[...] 2021-08-06
[18] 웹사이트 Baseline Requirements for the Issuance and Management of Publicly-Trusted Code Signing Certificates https://cabforum.org[...] CA/Browser Forum 2024-03-22
[19] 웹사이트 'Code Signing - Storage of Private Keys | SignPath' https://about.signpa[...] 2024-03-13
[20] 웹사이트 Code signing changes in 2021 https://knowledge.di[...] 2024-03-13
[21] 웹사이트 DigiCert timeline: Code signing's new private key storage requirement https://knowledge.di[...] 2024-03-13
[22] 웹사이트 New private key storage requirement for Code Signing certificates https://knowledge.di[...] 2024-03-13
[23] 웹사이트 '[CSCWG-public] Voting results Ballot CSCWG-17: Subscriber Private Key Extension' https://lists.cabfor[...] 2022-09-26
[24] 웹사이트 Code Signing Key Storage Requirements Will Change on June 1, 2023 https://www.ssl.com/[...] 2024-03-13
[25] 웹사이트 🥇 New private key storage requirement for all Code Signing certificates - June 2023 (Update) https://www.sslpoint[...] 2024-03-13
[26] 웹인용 Introduction to Code Signing https://msdn.microso[...]
[27] 웹인용 A Complete overview of Trusted Certificates - CABForum https://www.cabforum[...] 2015-02-26
[28] 웹인용 Securing your Private Keys as Best Practice for Code Signing Certificates https://www.thawte.c[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com