Linux 커널 모듈에 서명하려면 물리적 스마트 카드와 리더 장치가 필요합니까?

Linux 커널 모듈에 서명하려면 물리적 스마트 카드와 리더 장치가 필요합니까?

나는 재미(롤링 안정)를 위해 Linux 커널 소스를 구축하고 테스트했으며 요즘에는 내가 만든 키로 커널 모듈에 서명하고 싶었고 서명에 사용할 OpenSSL의 PKCS#11 엔진을 얻었습니다.

하지만 OpenSSL이 키/인증서를 요청할 수 없다는 문제가 있습니다. 그래서 확인을 사용했지만 pkcs11-tool결과는 "슬롯 없음"입니다.

이는 슬롯에 스마트 카드가 포함되어야 한다는 의미입니까? 그렇지 않으면 커널 모듈에 서명하는 방법은 무엇입니까?

다음은 openssl.cnf다이제스트 내용 이다.

# referenced from the [provider_sect] below.
# Refer to the OpenSSL security policy for more information.
# .include fipsmodule.cnf

[openssl_init]
providers = provider_sect
ssl_conf = ssl_sect
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so
MODULE_PATH = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
init = 0

# List of providers to load
[provider_sect]

하루 동안 구글링을 해봤지만 기업, 클라우드에 대한 정보만 찾았습니다... 소용이 없었습니다.

답변1

Linux 커널 소스 패키지의 하위 디렉터리 에는 도구(이전에는 스크립트, 이제는 커널과 함께 빌드된 바이너리 도구) scripts가 있습니다 .sign-file

예:linux-6.6.13/scripts/sign-file

이를 사용하여 커널 모듈에 서명할 수 있습니다.

/path/to/linux-6.6.13/scripts/sign-file sha256 private-key.pem certificate.der kernelmodule.ko

또는 PEM 형식의 단일 파일에 개인 키와 인증서가 모두 있는 경우 CONFIG_MODULE_SIG_KEY구성 메뉴에서 커널 구성 옵션을 설정할 수 있습니다.암호화 API -> 서명 확인에 사용되는 인증서 -> 모듈 서명 키의 파일 이름 또는 PKCS#11 URI)는 파일을 가리키고 CONFIG_MODULE_SIG_ALL=y(구성 메뉴에서) 설정합니다.로드 가능한 모듈 지원 활성화 -> 모든 모듈에 자동으로 서명), 커널 빌드 프로세스는 선택한 키를 사용하여 해당 커널 빌드의 모든 모듈에 자동으로 서명합니다.

다음 명령을 사용하여 적절한 키와 인증서 파일을 생성할 수 있습니다.

openssl req -new -nodes -utf8 -sha256 -days 36500 -batch -x509 \
   -config x509.genkey -outform PEM -out kernel_key.pem \
   -keyout kernel_key.pem

이 도구도 사용하려면 sign-file다음 명령을 사용하여 인증서 부분을 DER 형식으로 변환할 수 있습니다.

openssl x509 -in kernel_key.pem -out certificate.der -outform DER

바라보다커널 소스 패키지의 Documentation/admin-guide/module-signing.rst자세한 내용은.

커널 모듈 서명에는 PKCS#11(및 확장 스마트 카드 또는 기타 하드웨어 보안 모듈)을 사용할 필요가 없습니다.

하지만 자신만의 Linux 배포판을 만들어 전 세계에 대량으로 배포하기 시작한다면 보안 강화를 위해 배포 서명 키를 저장하는 PKCS#11 보안 모듈을 사용하는 것이 좋은 선택이 될 것입니다.아주 좋은 생각이에요.

관련 정보