암호화는 사용자 공간이나 커널 공간에서 구현됩니까?
공개/개인 키 쌍이 커널 공간에서 생성됩니까?
주어진 공개 키 또는 주어진 개인 키를 사용하여 암호화 또는 복호화하거나 암호화 방식으로 파일에 서명하는 것은 어떻습니까?
이러한 작업에는 어떤 시스템 호출이 사용되며 개인 키는 어떻게 전달/검색됩니까?
나는 "비대칭 암호화 알고리즘 정의" 페이지를 보면서 시간을 보냈습니다.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_akcipher
a를 가리키고 struct rsa_mpi_key
를 사용하여 이를 얻을 수 있다는 것을 알 수 있습니다 rsa_get_key()
.
답변2
또 다른 가능한 해결책은 커널이 암호화된 시스템 호출을 수행하기 위해 버퍼에서 읽는 것처럼 보이기 때문에 일부 코드를 시스템 호출 수준까지 디버깅하여 커널과 인터페이스하는 위치를 찾는 것입니다.