암호화 및 커널, 시스템 호출

암호화 및 커널, 시스템 호출

암호화는 사용자 공간이나 커널 공간에서 구현됩니까?

공개/개인 키 쌍이 커널 공간에서 생성됩니까?

주어진 공개 키 또는 주어진 개인 키를 사용하여 암호화 또는 복호화하거나 암호화 방식으로 파일에 서명하는 것은 어떻습니까?

이러한 작업에는 어떤 시스템 호출이 사용되며 개인 키는 어떻게 전달/검색됩니까?

나는 "비대칭 암호화 알고리즘 정의" 페이지를 보면서 시간을 보냈습니다.https://www.kernel.org/doc/html/v4.10/crypto/api-akcipher.html 하지만 어떤 함수가 무엇을 하는지, 매개변수와 반환값의 데이터 구조가 무엇인지는 알 수 없습니다.

즉, 어떤 구조의 요소가 개인 키에 해당합니까?

답변1

찾은 문서는 주로 커널 및 라이브러리 개발을 위한 것입니다. 암호화 프리미티브는 다음과 같은 용도로 사용됩니다.네트워크 보안 프로토콜스택은 커널에서 실행되어야 합니다. 당신처럼사용자 공간 인터페이스장, 공개키 암호화는 사용자 공간에서 접근할 수 없습니다. 그렇더라도 키가 끝나는 위치에 대해 걱정할 필요는 없습니다(힌트: 멋진 불투명 __ctx멤버가 보이시나요?). 흥미로운 부분은 제공되는 기능입니다.

Linux의 암호화 라이브러리에 관심이 있다면,OpenSSL,그누TLS그리고Libgcrypt아마도 가장 일반적인 선택일 것입니다. 아직 하나 있어요비교 페이지위키피디아에서. 주로 사용자 공간에서 실행되며 커널 Crypto API를 사용하여 성능을 향상시킵니다.

편집하다: Crypto API를 사용하고 싶다면 __ctx각 알고리즘에 따라 해당 구성원에 포함된 내용을 확인할 수 있습니다. 예를 들어 보면rsa.c__ctx, 멤버가 crypto_akciphera를 가리키고 struct rsa_mpi_key를 사용하여 이를 얻을 수 있다는 것을 알 수 있습니다 rsa_get_key().

답변2

또 다른 가능한 해결책은 커널이 암호화된 시스템 호출을 수행하기 위해 버퍼에서 읽는 것처럼 보이기 때문에 일부 코드를 시스템 호출 수준까지 디버깅하여 커널과 인터페이스하는 위치를 찾는 것입니다.

관련 정보