dhparam -check를 통과하면 VPN의 Diffie-Hellman 설정에 대한 판정처럼 느껴집니다. 그렇지 않습니다. 이 명령은 매개변수 파일 하나를 그것이 만족한다고 주장하는 산술과 비교할 뿐이고, 그룹 크기가 정책에 맞는지 또는 터널이 그 파일을 아예 읽는지에 대해서는 아무 말도 하지 않습니다. 이를 보안 검토로 읽는 것이 먼저 바로잡아야 할 가정입니다.

매개변수 파일에는 소수와 생성자가 들어 있습니다. 유효성은 그 숫자의 속성이고, 강도는 위협 모델과 상대방에 대한 판단이며, 둘은 서로 바꿀 수 없습니다.

유효성 검사가 실제로 확인하는 것

가진 파일에 검사를 실행하고 응답을 읽으세요. openssl dhparam -in dh.pem -check -noout는 매개변수 검사를 수행하고 인코딩된 출력을 억제합니다. 매개변수가 정상으로 보인다는 메시지는 값이 구조적으로 일관된다는 뜻이며, 짧은 그룹이 환경에서 허용된다는 뜻이 아닙니다.

-dsaparam 없이 생성하면 안전 소수가 나오고 (p-1)/2도 소수가 되기 때문에 그렇게 오래 걸립니다. DSA 스타일 경로는 매개변수를 더 빠르게 만들고 DH 형태로 변환하며, OpenSSL 설명서는 그 사용에 새로운 키에 대한 추가 요구 사항을 붙입니다. 두 구성 모두 세션 비밀이 아니며, 파일은 공개 구성 자료로서 인증서의 개인 키도, 제어 채널의 공유 비밀도 아닙니다.

파일을 판단하기 전에 크기와 생성자를 읽으세요

유효성 결과는 무엇이 검증되었는지 알 때 더 의미가 있습니다. openssl dhparam -in dh.pem -text -noout로 매개변수를 출력하고 소수 길이와 생성자 값을 기록하세요.

그 길이는 습관이 아니라 문서화된 정책과 비교하세요. 요구 사항이 현대 TLS 스택의 승인된 명명 그룹이라면 손으로 만든 파일은 완전히 잘못된 산출물일 수 있습니다. 변경 기록에 두 숫자를 적어 두어 다음 검토자가 다시 도출하지 않게 하세요.

검사를 재생성으로 바꾸지 마세요

여기서의 실패 방식은 검사처럼 보이지만 생성기처럼 동작하는 명령입니다. 비트 길이를 더하면 openssl dhparam -check 2048처럼 새 매개변수를 요구하고 입력 파일은 무시됩니다. 생성자 옵션도 같은 일을 합니다. 검사만 하려면 -in과 -check를 넘기고 크기를 설명하는 것은 아무것도 넘기지 마세요.

출력을 원래 경로에 덮어쓰는 것도 같은 의심을 받아 마땅한데, 설명서는 파일 출력이 원자적이지 않다고 경고합니다. 쓰는 도중의 충돌은 잘린 매개변수 파일과 시작되지 않는 서비스를 남깁니다.

그룹은 유행이 아니라 프로토콜에 맞추세요

크기 정책은 도구가 대신 읽을 수 없는 결정입니다. 2048비트 유한체 그룹은 흔한 하한이고 더 큰 그룹은 핸드셰이크 시간을 쓰므로, 자기 기준선이 말하는 숫자를 골라 적어 두세요. 널리 쓰이는 그룹은 공개되어 있다고 약한 것이 아니며, 숨기는 것은 여기에 아무것도 더하지 않습니다.

스택이 승인된 명명 그룹을 지원한다면 독특해 보이게 하려고 특이한 매개변수를 만들지 말고 문서화된 배치를 따르세요. 명명 그룹은 상대방이 알아보고 검토자가 찾아볼 수 있는 것으로, 아무도 분류할 수 없는 맞춤 파일보다 값집니다.

VPN이 파일을 읽는지 확인하세요

어떤 프로세스도 읽지 않는 올바른 매개변수 파일은 아무것도 바꾸지 않습니다. OpenVPN에서 서버 지시문은 경로가 붙은 dh이고, ECDH나 TLS 1.3 키 교환에 의존하는 배포는 대신 dh none을 설정할 수 있습니다. 템플릿이 아니라 실행 중인 구성을 확인하고, 클라이언트와 상대방이 같은 구성을 협상하는지 확인하세요.

정말 필요한 증거, 즉 터널이 협상한 그룹, 파일의 매개변수 길이, 그 길이가 충족하는 정책 한 줄로 고리를 닫으세요. 통과한 검사는 그 목록의 한 항목일 뿐입니다. 그것을 전부의 답으로 삼는 것이 짧은 그룹이 잡아야 했던 감사를 통과해 살아남는 방식입니다.

관련 글