하드 드라이브 암호화 키를 머신에 저장하지 않고 부팅 시 마운트하려면 어떻게 해야 합니까?

하드 드라이브 암호화 키를 머신에 저장하지 않고 부팅 시 마운트하려면 어떻게 해야 합니까?

설정: 저는 USB HDD와 함께 Raspberry Pi를 사용하고 있으며, 아치 리눅스를 실행하고 있습니다.사물을 동기화나만의 "클라우드" 동기화를 위해.

질문: 물리적인 침입으로 인해 HDD 파이와 HDD가 도난당하는 경우 HDD에 있는 파일이 기밀로 유지되도록 하고 싶습니다.

현재의 높은 수준의 아이디어: 하드 드라이브를 암호화하고 네트워크 서버에 키를 저장합니다. 시작 시 키가 다운로드되고 암호가 해독되어 설치됩니다. HDD/SD 카드에 키를 저장하지 마십시오. 도난이 발생하면 웹 서버에서 키 제공을 중지하세요.

Q: 어떻게 시작하나요?

(crypttab이 이 문제를 해결할 수 있습니까? 나만의 시스템 장치를 작성하는 것이 좋을까요? 다른 아이디어나 솔루션도 환영합니다)

답변1

설정하는 가장 쉬운 방법은 일반 텍스트 시스템 파티션(SD 카드에 있는 것 같아요)과 암호화된 데이터 파티션을 갖는 것입니다. 데이터 파티션은 dmcrypt를 사용하여 암호화되며 키는 서버에서 다운로드한 키 파일에 저장됩니다.

서버 인프라 설정부터 시작한 다음 키 파일을 다운로드하고 이를 사용하여 암호화된 볼륨을 생성하거나 cryptsetup luksFormat /dev/sdb1 /run/data.keyfile기존 볼륨에 키를 추가합니다 cryptsetup luksAddKey /dev/mapper/encrypted /run/data.keyfile. 비밀번호나 키 파일을 사용하여 볼륨 잠금을 해제할 수 있으므로 관리하기가 더 쉽습니다(서버를 사용할 수 없는 경우에도 비밀번호를 입력할 수 있음).

키 파일은 특정 형식일 필요는 없습니다. 서버에서 임의의 바이트를 생성하기만 하면 됩니다. 16바이트이면 충분합니다(더 많다고 해서 더 나은 보안을 얻을 수는 없지만 더 적다고 해서 더 나은 성능을 얻을 수는 없습니다) </dev/urandom head -c 16 >pi.keyfile.

엿보는 눈을 피하기 위해 HTTPS를 사용하여 키를 제공하세요. CA 검증 인증서가 없으면 직접 생성하여 /etc/ssl/certs다운로드 명령( wget --ca-certificate /etc/local/my.cert또는 curl --cacert /etc/local/my.cert)에 추가하거나 전달하세요.

볼륨을 활성화하기 전에 키를 다운로드해야 합니다. 다음 중 하나를 사용하여 한 단계로 이 작업을 수행할 수 있습니다.

wget -nv -O - https://myserver.example.com/pi.keyfile | cryptsetup luksOpen /dev/sdb1 --key-file /dev/stdin
curl https://myserver.example.com/pi.keyfile | cryptsetup luksOpen /dev/sdb1 --key-file /dev/stdin

또는 키를 임시 파일로 다운로드한 다음 볼륨을 활성화하고 마지막으로(필수는 아니지만 보안이 약간 향상될 수 있음) 임시 파일을 삭제할 수 있습니다. 이 임시 파일의 원래 위치는 /runRAM에 있으며 루트로만 쓸 수 있습니다(영구 저장소에 키를 다운로드하지 마십시오). 루트에서만 파일을 읽을 수 있도록 설정해야 합니다( umask 700다운로드하기 전에 일정을 설정할 수 있음). 이는 시작 시 실행되는 모든 코드를 제어하지 않는 경우에만 중요합니다.

키를 임시 파일로 다운로드하는 경우 키 파일을 에 넣고 /etc/crypttabsystemd 장치를 추가하여 볼륨을 활성화하기 전(그러나 네트워크를 사용할 수 있게 된 후에) 실행되는 키 파일을 다운로드하고 다른 장치를 추가하여 삭제할 수 있습니다. 그러면 키 파일. 설치가 더 쉬워 wget … | cryptsetup …보입니다 /etc/rc.local.

클라이언트가 키를 다운로드할 때 클라이언트를 인증할 수 있습니다. 인증 토큰은 Pi에 일반 텍스트로 저장되어야 합니다. SSL 클라이언트 인증서를 사용할 수 있습니다.

curl --cert /etc/keyfile.cert https://myserver.example.com/pi.keyfile
wget --certificate /etc/keyfile.cert https://myserver.example.com/pi.keyfile

또는 HTTP 기본 인증을 사용하는 비밀번호로 저장됩니다./root/.netrc:

curl -n --user=pi https://myserver.example.com/pi.keyfile
wget --user=pi /etc/keyfile.cert https://myserver.example.com/pi.keyfile

서버 측에서 기본 인증을 구성하는 것이 설정하기 더 쉬울 수 있습니다. 특수 문자(예: </dev/urandom | head -c 16 | base64) 없이 임의로 생성된 비밀번호를 사용하세요.

무엇을 하든 Pi를 훔치는 사람은 누구든지 보낸 사람 측에서 먼저 차단하지 않으면 비밀번호를 얻게 되며 키를 다운로드할 수 있습니다. 또한 Pi에 물리적으로 액세스할 수 있는 사람은 SD 카드를 신속하게 제거하고 복사본을 만든 다음 다시 연결할 수 있습니다. 가동 시간 이외의 다른 항목을 모니터링하지 않으면 이는 정전처럼 보입니다. 이를 완전히 예방할 수 있는 방법은 없습니다. 스마트 카드에 키를 넣어 공격자가 키를 복사하는 것을 방지할 수 있지만, 스마트 카드를 훔치거나 그 자리에서 키 파일을 다운로드하는 데 사용할 수는 없습니다.

다시 말하지만, 물리적으로 접근할 수 있는 사람이 키 파일을 빠르게 다운로드한 다음 여유 시간에 디스크를 훔치고 암호를 해독하는 것을 막을 수는 없습니다. 이러한 일이 발생하지 않도록 하려면 다양한 가격대로 제공되는 변조 방지 하드웨어를 살펴보는 것이 좋습니다.

답변2

나는 약간 다른 솔루션으로 동일한 문제를 해결했습니다. 저는 ZoL을 사용하고 있으므로 EcryptFS를 사용하는 것을 선호합니다. 또한 키에 액세스할 수 있기를 원하기 때문에 파일 교환 서비스(예: Dropobox)에 암호화하여 저장합니다. 그런 다음 절차는 다음과 같습니다.

a) A systemd unit connects to the file exchange service, downloads the key and 
   decrypts it.
b) The dependent systemd units wait until the previous has finished and then use 
   the decrypted key to mount the file systems.
c) I have a service that monitors a box switch, so if the server box is opened I 
   receive an alert via pushbullet and the key is deleted from dropbox.

서버의 물리적 무결성이 손상되거나 서버가 도난당하는 등의 경우 키가 보관용 계정에서 제거되고 데이터를 읽을 수 없게 된다는 개념입니다.

관련 정보