Linux 비밀번호 해시의 솔트란 무엇이고 왜 중요한가요?

마지막 업데이트 : 04/12/2025
저자 : 이삭
  • 솔트는 사용자마다 고유한 해시를 달성하기 위해 해시 전에 비밀번호에 추가되는 무작위 문자열입니다.
  • Linux /etc/shadow에 해시, 솔트, 알고리즘을 저장하여 사전 공격과 레인보우 테이블에 대한 보안을 강화합니다.
  • 좋은 관행에는 강력한 해시 알고리즘과 함께 길고 무작위적이며 고유한 솔트가 필요합니다. 데이터베이스 잘 보호됨.
  • 비밀번호 솔팅은 강력한 비밀번호, MFA, 비밀번호 관리자를 포함하는 보다 광범위한 보안 정책에 통합되어야 합니다.

리눅스에서 비밀번호 해시의 솔트

GNU/Linux 시스템을 사용하거나 계정 보안에 대해 걱정하는 경우 다음 내용을 들어보셨을 것입니다. 비밀번호 해시의 솔트자주 언급되지만 종종 절반만 이해되는 개념 중 하나입니다. 기술적인 것처럼 들리지만 실제로는 쉽게 깨질 수 있는 시스템과 공격에 훨씬 더 강한 시스템의 차이를 만듭니다.

간단히 말해서 소금은 비밀번호 해시를 예측 불가능하게 만드는 핵심 요소해시 알고리즘을 적용하기 전에 무작위 데이터를 추가하여 두 사용자가 동일한 비밀번호를 사용하더라도 데이터베이스에 저장된 결과는 다르게 됩니다. Linux에서의 구체적인 구현 방식, /etc/shadow와의 관계, mkpasswd와 같은 도구, 그리고 최신 보안 모범 사례는 그 자체로 하나의 거대한 세계이며, 이에 대해 자세히 살펴보겠습니다.

비밀번호 해시의 솔트란 정확히 무엇인가요?

비밀번호 해시의 salt 정의

암호학에서는 소금 (소금)은 임의의 문자열 해시 함수를 적용하기 전에 사용자 비밀번호에 추가됩니다. 이 함수의 목표는 평문 비밀번호가 여러 사용자에게 동일하더라도 결과 해시 값이 고유하도록 하는 것입니다.

사용자가 비밀번호를 생성하거나 변경하면 시스템은 다음을 생성합니다. 무작위 소금이는 암호와 결합하고(스킴에 따라 특정 형식인 앞, 뒤 또는 암호와 결합) 해당 조합에 해시 알고리즘을 적용합니다. SHA-256 o SHA-512비밀번호는 데이터베이스에 저장되지 않습니다. (비밀번호 + 솔트)의 해시그리고 대부분의 방식에서는 소금 자체도 해시와 함께 저장됩니다.

이 기술은 많은 것을 렌더링합니다 미리 계산된 해시를 기반으로 하는 공격 기술레인보우 테이블과 같은 이 기능은 대규모 사전 공격과 무차별 대입 공격을 크게 복잡하게 만듭니다. 공격자는 여러 사용자가 비밀번호를 공유한다는 사실을 더 이상 악용할 수 없습니다. 각 사용자의 해시값이 다르기 때문입니다.

소금 자체가 비밀이 아니라는 것을 이해하는 것이 중요합니다. 비밀번호나 개인키가 아닙니다그 기능은 해싱 프로세스에 무작위성과 고유성을 도입하는 것입니다. 보안은 여전히 ​​다음을 사용하는 데 달려 있습니다. 강력한 암호 y 적합한 해시 알고리즘많은 클래식 Linux 시스템에서는 SHA-256이나 SHA-512의 변형을 사용하지만, 비밀번호용으로 특별히 설계된 것이 바람직합니다(예: bcrypt, scrypt, Argon2).

비밀번호 솔팅이 단계별로 작동하는 방식

비밀번호 솔팅 작동 방식

염장 과정은 상당히 간단한 일련의 단계로 요약될 수 있지만 보안에 큰 영향을 끼친다:

  Process Explorer와 VirusTotal을 사용하여 악성 프로세스를 감지하는 방법

첫째, 사용자가 비밀번호를 등록하거나 변경할 때 시스템은 독특하고 무작위적인 소금 해당 자격 증명에 대한 솔트는 일반적으로 충분한 길이(예: 16바이트 이상)를 가지며 암호학적으로 안전한 난수 생성기에서 얻어집니다.

다음으로, 사용자가 선택한 비밀번호는 해당 salt와 결합되어 다음을 형성합니다. 중간 사슬이 조합은 salt + password를 연결하는 것처럼 간단할 수도 있고, 해시 체계에 의해 정의된 더 복잡한 형식을 가질 수도 있습니다. 중요한 것은 각 사용자가 서로 다른 조합을 갖게 된다는 것입니다.

그 다음에는, 단방향 해시 알고리즘그 결과, 고정 길이의 무작위 문자열인 해시가 생성되어 솔트와 함께 데이터베이스에 저장됩니다. 최신 시스템에서는 다음과 같은 알고리즘이 개발되고 있습니다. 길고 복잡한 출구이렇게 하면 검색 공간이 늘어나고 무차별 대입 공격의 비용이 더 많이 듭니다.

마지막으로 사용자가 로그인하면 시스템은 입력된 비밀번호를 다시 검색합니다. 관련 소금 데이터베이스에서 동일한 결합 및 해싱 과정을 반복하고 그 결과를 저장된 해시값과 비교합니다. 두 값이 일치하면 평문을 몰라도 비밀번호가 정확하다는 것을 알 수 있습니다.

이 메커니즘은 데이터베이스가 유출되더라도 공격자가 다음을 볼 수 있도록 보장합니다. 각자의 소금을 사용한 개별 해시비교 가능한 해시 집합 대신 공격을 막는 것은 마법과 같은 일이 아니지만, 계산 비용이 상당히 더 많이 듭니다.

비밀번호 해시에 솔트를 사용하는 장점

비밀번호에 솔트를 사용하는 장점

염장법을 사용하는 주된 이유는 다음과 같습니다. 저장된 비밀번호의 보안을 강화합니다 다양한 공격에 대응할 수 있습니다. 하지만 구체적인 이점을 자세히 설명하는 것도 중요합니다.

첫째, 소금을 뿌리면 사전 공격에 대한 저항솔트가 없으면 공격자는 흔히 사용되는 비밀번호와 그 해시값을 방대한 목록으로 만들어 훔친 데이터베이스와 간단히 비교할 수 있습니다. 사용자마다 고유한 솔트가 적용되면, 각 비밀번호와 솔트의 조합이 서로 다른 값을 생성하기 때문에 미리 계산된 해시는 무용지물이 됩니다.

둘째, 소금을 사용하면 효과가 떨어집니다. 레인보우 테이블이는 인기 비밀번호의 복구 속도를 높이기 위해 미리 계산된 해시 데이터베이스일 뿐입니다. 다시 말해, 결과는 특정 솔트에 따라 달라지기 때문에, 솔트되지 않은 해시용으로 설계된 이러한 테이블은 쓸모없거나 적어도 매우 비효율적입니다.

또 다른 명확한 장점은 다음과 같습니다. 누출 시 개인 정보 보호침입자가 해시와 솔트가 포함된 사용자 테이블에 접근하더라도, 다른 사용자와 동일한 비밀번호를 사용하는 사용자를 신속하게 식별하거나 대규모 공격을 쉽게 실행할 수 없습니다. 각 계정은 개별적인 주의가 필요하며, 이는 대규모 공격에서는 일반적으로 비현실적입니다.

  새로운 WhatsApp 사기 경고: 계정과 돈을 훔치는 Bizum 및 화상 통화

또한 소금을 뿌리면 복잡성이 더해집니다. 무차별 대입 공격후보 비밀번호를 모든 해시에 대해 한 번에 테스트하는 대신, 공격자는 각 사용자의 솔트 값을 고려해야 하므로 총 작업 부하가 배가됩니다. 여기에 bcrypt나 Argon2처럼 느리고 매개변수화 가능한 해싱 알고리즘을 결합하면 공격 비용은 더욱 증가합니다.

마지막으로, 솔팅은 기술 발전에 잘 적응하는 기술입니다. 컴퓨터 장비가 발전하고 새로운 공격이 등장하더라도, 강렬한 해시와 독특한 소금의 조합 높고 확장 가능한 난이도를 유지합니다. 즉, 소금의 길이를 늘리고, 알고리즘을 강화하고, 계산 비용을 늘리는 등의 작업이 가능합니다.

Linux가 비밀번호 솔팅(/etc/shadow)을 구현하는 방법

Linux 시스템 및 기타 *NIX 변형에서는 사용자 암호가 /etc/passwd에 저장되지 않고 파일에 저장됩니다. / etc / 그림자슈퍼유저만 접근할 수 있는 이 파일에는 비밀번호 해시와 추가 정보가 저장되어 있으며, 여기서 솔트와 해시 알고리즘이 사용된 것이 명확하게 드러납니다.

/etc/shadow의 줄은 다음과 비슷한 구조를 갖습니다.

사용자:$id$sal$hash:추가_필드…

상징 $ 각 부분을 분리합니다. 사용자 이름 뒤의 첫 번째 부분은 다음을 나타냅니다. 알고리즘의 종류 사용됩니다. 예를 들어, 1 달러 일반적으로 MD5를 나타냅니다. 5 달러 SHA-256 및 6 달러 SHA-512는 DES나 MD5 기반의 기존 방식보다 보안성이 더 뛰어나므로 현대 배포판에서 가장 흔히 사용되는 알고리즘입니다.

알고리즘 식별자가 나타난 후 그리고 나서 결과 해시이 모든 것이 동일한 필드 내에 있습니다. 비밀번호가 검증되면 시스템은 해당 식별자인 솔트를 읽고 입력된 비밀번호에 해당하는 알고리즘을 적용한 후, 계산된 해시값을 저장된 해시값과 비교합니다.

어떤 사용자가 암호화된 비밀번호를 가지고 있는지, 어떤 알고리즘이 사용되고 있는지 빠르게 검사하려면 다음과 같은 명령을 사용할 수 있습니다. grep '\$' /etc/shadow이 맥락에서 달러 기호($)는 최신 형식의 해시가 있는 줄을 찾는 데 사용됩니다. 이 기호는 정규 표현식에서 "줄 끝"을 의미하므로 백슬래시로 이스케이프 처리해야 합니다.

비밀번호가 없거나 잠긴 계정은 일반적으로 해당 필드에 이와 같은 값이 표시됩니다. ! o * 달러로 표시된 해시 대신, 표준 비밀번호로는 인증할 수 없음을 나타냅니다. 이 구조는 한 가지를 명확하게 보여줍니다. Linux는 포맷에 솔팅을 통합합니다. 저장 비밀번호 기본적으로.

비밀번호 해싱과 솔팅의 차이점

때때로 혼동되는 두 가지 개념을 명확하게 구분하는 것이 중요합니다. 해싱 y 염장비밀번호 해싱은 단방향 알고리즘을 사용하여 비밀번호를 인식할 수 없는 값으로 변환하는 과정입니다. 서버는 원래 비밀번호를 알 필요가 없으며, 동일한 해시값을 생성하기 때문에 사용자가 올바른 비밀번호를 알고 있는지 확인하기만 하면 됩니다.

  WINUX란 무엇인가: 자유로운 영혼과 Windows의 모양과 느낌을 갖춘 Linux

문제는 두 개의 비밀번호가 동일하다면 무염 해시도 동일합니다.이를 통해 공격자는 비밀번호로 사용자를 비교하고 그룹화하거나 미리 계산된 테이블을 사용할 수 있습니다. 또한, 해시 알고리즘이 빠르고 데이터 무결성을 고려하여 설계된 경우(예: 간단한 SHA-256) 대규모 무차별 대입 공격에 더 취약해집니다.

Salting은 바로 그 약점을 해결하기 위해 등장합니다. 비밀번호에 임의의 데이터를 추가합니다 해시하기 전에. 결과적으로 두 사용자가 비밀번호로 "casa"를 선택하더라도 데이터베이스의 해시는 완전히 달라집니다. 예를 들어 한 사용자는 "casa+7Ko#"를, 다른 사용자는 "casa8p?M"을 해시 전 문자열로 사용하기 때문입니다.

따라서 해싱과 솔팅은 경쟁하지 않고 오히려 서로 보완합니다. 해싱은 다음을 제공합니다. 단방향성 속성 그리고 검증의 용이성; 소금이 제공됩니다 대규모 공격에 대한 고유성과 회복력안전한 비밀번호 저장 구현은 두 가지 기술을 결합한 것으로, 이상적으로는 이 목적에 맞게 설계된 알고리즘을 사용하고 비용을 구성 가능하게 합니다.

Linux에서 mkpasswd를 사용하여 salt 사용하기

GNU/Linux 환경 및 기타 시스템에서 유닉스소금을 실험하는 매우 실용적인 방법은 도구입니다. mkpasswd이 명령은 다음을 생성하는 데 사용됩니다. 암호화된 비밀번호 안전하게 보호되며 일반적으로 사용자 생성 프로세스, 관리 스크립트 등에 통합됩니다.

mkpasswd의 기본 구문을 사용하면 암호화할 암호와 알고리즘 유형(예: des, md5, sha-256, sha-512)과 같은 일련의 옵션을 지정할 수 있습니다. -m현대 시스템에서 가장 현명한 선택은 다음과 같습니다. SHA-512 최소한으로, 또는 배포가 지원된다면 훨씬 더 강력한 계획을 통해서도 가능합니다.

소금에 절이는 것과 관련하여 특히 흥미로운 옵션은 다음과 같습니다. -S을 통해 소금을 더하다 암호화하기 전에 암호를 입력합니다. 수동으로 지정하지 않으면 mkpasswd가 다음을 생성할 수 있습니다. 각 실행에서 무작위 소금따라서 동일한 로그인 비밀번호를 사용하더라도 결과 해시값은 매번 달라집니다.

이는 쉽게 확인할 수 있습니다. mkpasswd를 사용하여 SHA-512와 임의의 솔트를 사용하여 "password123"을 여러 번 암호화하면 완전히 다른 해시값을 얻게 됩니다. 그러나 -S 옵션을 사용하여 동일한 솔트 값을 전달하면 비밀번호와 솔트 조합이 변경되지 않으므로 해시값은 항상 동일합니다.

이 도구 덕분에 매우 쉽습니다. salt로 암호화된 비밀번호 준비 아무것도 프로그래밍하지 않고도 구성 파일에 추가하고, 사용자를 수동으로 관리하고, 솔팅 동작을 테스트할 수 있습니다.

디지털 위생이란 무엇인가?
관련 기사 :
디지털 위생: 온라인 생활 속의 안전, 웰빙 및 질서