비밀번호 해싱과 암호화의 차이점


140

이 질문에 현재 가장 많이 투표 된 내용은 다음 과 같습니다.

보안 관련 문제는 아니지만 보안 문제가 아닌 또 다른 문제는 완전하며 암호 해시와 암호화의 차이점을 파악 하지 못하는 입니다. 프로그래머가 안전하지 않은 "암호 기억"기능을 제공하려는 코드에서 가장 일반적으로 발견됩니다.

이 차이점은 정확히 무엇입니까? 나는 항상 해싱이 일종의 암호화라는 인상을 받았습니다. 포스터가 말하는 안전하지 않은 기능은 무엇입니까?


비밀 / 암호를 단순히 해시해서는 안되는 이유에 대한 잘 작성된 기사입니다. 대신 HMAC를 사용하십시오. benlog.com/articles/2008/06/19/dont-hash-secrets
Jay Kumar

StackExchange 보안 블로그 주제의 훌륭한 요약 : security.blogoverflow.com/2011/11/…
David J. Liszewski

@JayKumar : 연결 한 기사가 매우 잘못되었습니다. 암호 키 (공격자에게 표시 될 것으로 예상 됨)와 MAC 키 (비밀 유지가 예상 됨)를 병합합니다. David J. Liszewski의 링크는 훨씬 정확한 설명을 제공합니다.
Rufflewind

답변:


222

해싱은 단방향 함수입니다 (매핑, 매핑). 되돌릴 수 없으며 보안 해시 알고리즘을 적용하면 원래 문자열을 다시 가져올 수 없습니다. "충돌"이라고하는 것을 생성하는 것, 즉 동일한 해시를 제공하는 다른 문자열을 찾는 것입니다. 암호화 보안 해시 알고리즘은 충돌이 발생하지 않도록 설계되었습니다. 레인보우 테이블을 사용하여 보안 해시를 공격 할 수 있습니다. 레인보우 테이블 은 해시를 저장하기 전에 소금 을 적용하여 대응할 수 있습니다 .

암호화는 올바른 (양방향) 기능입니다. 뒤집을 수 있으므로 키가있는 경우 맹 글링 된 문자열을 해독하여 원래 문자열을 얻을 수 있습니다.

안전하지 않은 기능은 암호를 암호화하면 응용 프로그램에 어딘가에 키가 저장되어 있으며 데이터베이스 및 코드에 액세스하는 공격자가 키와 암호화 된 텍스트를 모두 가져 와서 원래 암호를 얻을 수 있다는 것입니다 해시에서는 불가능합니다.

사람들은 일반적으로 크래커가 데이터베이스 또는 코드를 소유하고 있다면 암호가 필요하지 않으므로 차이점이 있다고 말합니다. 이는 여전히 사용자 암호를 보호해야 할 의무가 있기 때문입니다. 주로 대부분의 사용자가 동일한 암호를 반복해서 사용하기 때문에 암호를 유출하여 더 큰 위험에 노출되기 때문입니다.


1
명확하게 해시로 원하는 보안을 얻으려면 해시가 되돌릴 수 없지만 특정 해시를 생성하는 다른 문자열을 생성하는 데 계산적으로 비실용적이라는 특정 속성을 가진 암호화 보안 해시 알고리즘이어야합니다.
Tall Jeff

11
예, 아니오 ... 자신의 응용 프로그램 보안을 위해 해시 충돌을 발생시키기는 어렵지만 비가역성은 암호 유출을 피하기에 충분합니다.
Dave Sherohman

5
실키 : 그리고 당신은 당신의 거친 해시 함수에서 원래 암호를 어떻게 정확하게 되 찾을 것입니까? 나는 당신이 데이브의 코멘트를 다시 읽어 제안
Vinko Vrsalovic을

1
어쨌든 많은 충돌이있는 해시 함수가 암호 보안에 더 좋지만 더 많은 암호를 사용하여 계정에 로그인 할 수 있습니다.
williamvicary

1
모든 해시 된 항목은 별도의 소금을 사용해야하므로 @ n00b 소금은 하드 코딩 할 수 없습니다. 소금의 요점은 UserA와 UserB가 모두 암호 "1234"를 사용하는 경우입니다. UserA의 암호를 찾은 경우 소금이 다르기 때문에 UserB가 동일한 암호를 사용했다고 말할 수 없습니다. 염분이 비밀로 유지되는 것은 보안 상 중요하지 않으며, 대부분의 구현에서는 해시를 나타내는 이진 얼룩의 앞면 또는 뒷면에 소금을 연결합니다.
Scott Chamberlain

34

해싱은 단방향 기능이므로 암호를 해시 하면 원래 암호를 해시에서 다시 가져 오는 것이 매우 어렵습니다. 암호화는 양방향 기능으로, 암호화 된 텍스트에서 원본 텍스트를 훨씬 쉽게 가져올 수 있습니다.

일반 해싱은 사전 공격을 사용하여 쉽게 물리 칠 수 있습니다. 공격자는 사전의 모든 단어 (또는 특정 길이까지의 모든 문자 조합)를 미리 해시 한 다음이 새로운 사전을 사용하여 해시 된 비밀번호를 찾습니다. 저장된 각 해시 암호에 고유 한 임의 소금을 사용하면 공격자가이 방법을 사용하기가 훨씬 더 어려워집니다. 기본적으로 사용하는 모든 염분 값에 대해 새로운 고유 사전을 작성하여 공격 속도를 크게 늦출 필요가 있습니다.

암호화 알고리즘을 사용하여 비밀번호를 저장하는 것은 안전하지 않습니다. 사용자 나 관리자가 암호화 된 텍스트에서 원래 비밀번호를 다시 가져 오는 것이 더 쉬운 경우 공격자가 동일한 비밀번호를 사용하는 것이 더 쉽기 때문입니다.


12

암호화 및 해시 비밀번호

위 이미지에서 볼 수 있듯이 암호가 암호화 된 경우 누군가가 일반 텍스트 암호를 추출 할 수있는 숨겨진 비밀입니다. 그러나 비밀번호가 해시되면 해시 값에서 비밀번호를 복구하는 방법이 거의 없으므로 안심할 수 있습니다.


암호화 된 암호와 해시 된 암호 에서 추출 – 어느 것이 더 낫습니까?

암호화가 좋습니까?

일반 텍스트 비밀번호는 DES, AES와 같은 대칭 암호화 알고리즘을 사용하거나 다른 알고리즘을 사용하여 암호화하고 데이터베이스에 저장할 수 있습니다. 인증시 (사용자 이름 및 비밀번호로 ID 확인) 애플리케이션은 데이터베이스에 저장된 암호화 된 비밀번호를 해독하고 사용자가 제공 한 비밀번호와 동일한 지 비교합니다. 이 유형의 비밀번호 처리 방식에서는 누군가가 데이터베이스 테이블에 액세스하더라도 비밀번호를 재사용 할 수 없습니다. 그러나이 방법에도 나쁜 소식이 있습니다. 누군가가 응용 프로그램에서 사용하는 키와 함께 암호화 알고리즘을 얻는 경우 암호 해독을 통해 데이터베이스에 저장된 모든 사용자 암호를 볼 수 있습니다. "이것이 내가 가진 최선의 선택"이라고 소프트웨어 개발자가 소리를 지르지 만 더 좋은 방법이 있습니까?

암호화 해시 기능 (단방향 만)

예, 여기 요점을 놓친 것일 수 있습니다. 해독 및 비교할 필요가 없다는 것을 알고 계셨습니까? 암호를 일부 변환 된 단어로 변환 할 수있는 단방향 전용 변환 방법이 있지만 역방향 조작 (변환 된 단어에서 암호 생성)은 불가능합니다. 이제 누군가 누군가 데이터베이스에 액세스하더라도 변환 된 단어를 사용하여 비밀번호를 재생성하거나 추출 할 수있는 방법이 없습니다. 이 접근 방식에서는 일부 사용자의 최고 비밀 암호를 알 수있는 방법이 거의 없습니다. 여러 애플리케이션에서 동일한 비밀번호를 사용하여 사용자를 보호합니다. 이 접근법에 어떤 알고리즘을 사용할 수 있습니까?


그러나 서비스에 로그인하면 암호는 일반 텍스트 / 암호화로 전송됩니다. 암호는 서버에 해시로 보내면 비교할 수 있기 때문입니다. 해커가 해시를 알고 있다면 해시를 서버로 보내 로그인하십시오. 이것이 비교를 위해 암호를 서버로 암호화하여 암호를 해독하고 해시해야하는 이유입니다. 안전한가요? 암호가 장기간 해시되지 않은 형태로 저장되지 않고 더 이상 필요하지 않은 모든 암호화 / 일반 텍스트 암호가 메모리에서 지워진다면?
AgentM

8

필자는 항상 최종 값을 원래 값으로 가져올 수있는 방식으로 암호화를 양방향으로 변환 할 수 있다고 생각했으며 해싱을 사용하면 최종 결과에서 원래 값으로 되돌릴 수 없습니다.


8

해싱 알고리즘은 일반적으로 암호화 방식이지만 암호화를 통해 해독 할 수 있지만 해싱은 불가능하다는 것이 주요 차이점입니다.

암호화 기능은 일반적으로 입력을 가져와 동일하거나 약간 더 큰 암호화 된 출력을 생성합니다.

해싱 함수는 입력을 가져와 일반적으로 고정 된 크기의 작은 출력을 생성합니다.

해시 된 결과를 가져 와서 원래의 입력을 되찾기 위해 "해시"할 수는 없지만 일반적으로 동일한 해시를 생성하는 것으로 무차별 대입 할 수 있습니다.

즉, 인증 체계가 암호를 가져 와서 해시하여 암호가 필요한 암호의 해시 버전과 비교하는 경우 실제로 원래 암호를 알 필요는 없으며 해시 만 알고 무차별 대입 할 수 있습니다 비밀번호가 다른 경우에도 일치하는 방법으로 이동하십시오.

해싱 함수는 일반적으로 충돌 가능성을 최소화하고 다른 것과 동일한 해시를 생성하는 것을 계산하기 어렵게 만들기 위해 만들어집니다.


4

이상적으로는 두 가지를 모두 수행해야합니다.

먼저 단방향 보안을 위해 패스 비밀번호를 해시하십시오. 추가 보안을 위해 소금을 사용하십시오.

그런 다음 암호 해시 데이터베이스가 손상된 경우 해시를 암호화하여 사전 공격으로부터 방어하십시오.


3
무엇으로 암호화합니까? 그들이 당신을 너무 세게 쳐서 모든 사용자의 암호 (해시, 암호화 또는 기타)로 데이터베이스에 도착했다면 암호를 해독하는 열쇠를 찾을 수 없었습니까?
Luc

5
이것은 억압되지 않습니다. 응용 프로그램이 손상되지 않은 상태에서 데이터베이스가 손상 될 가능성을 배제해서는 안됩니다. 따라서 해시 암호화는 추가 보안 계층입니다.
Arie

@Luc 나는 당신과 동의하지 않습니다, 나의 이전의 자기. 애플리케이션 코드 (또는 구성 파일)를 손상시키지 않는 너무 많은 SQL 주입을 보았으며 이제 비밀 을 추가 하는 것이 암호화 또는 후추 형태로 도움이된다고 생각합니다 . 그러나 해싱을 대체 해서는 안됩니다 . 보다 자세한 답변은 여기를 참조하십시오 : security.stackexchange.com/a/31846/10863
Luc

3

해싱 :

단방향 알고리즘이며 일단 해시되면 롤백 할 수 없으며 이는 암호화에 대한 장점입니다.

암호화

암호화를 수행하면이를 수행 할 수있는 열쇠가 있습니다. 이 키가 유출되면 모든 비밀번호를 쉽게 해독 할 수 있습니다.

반면, 데이터베이스가 해킹되거나 서버 관리자가 DB에서 데이터를 가져 와서 해시 된 비밀번호를 사용한 경우에도 해커는 이러한 해시 된 비밀번호를 해제 할 수 없습니다. PBKDF2에 적절한 솔트 및 추가 보안으로 해싱을 사용하는 경우 실제로 실제로 불가능합니다.

해시 함수를 어떻게 작성해야하는지 보려면 여기 를 방문 하십시오 .

해싱을 수행하는 많은 알고리즘이 있습니다.

  1. MD5 - MD5 (Message Digest Algorithm 5) 해시 기능을 사용합니다. 출력 해시는 길이가 128 비트입니다. MD5 알고리즘은 Ron Rivest에 의해 1990 년대 초에 설계되었으며 오늘날 선호되는 옵션은 아닙니다.

  2. SHA1-1995 년에 게시 된 SHA1 (Security Hash Algorithm) 해시를 사용합니다. 출력 해시는 길이가 160 비트입니다. 가장 널리 사용되지만 오늘날 선호되는 옵션은 아닙니다.

  3. HMACSHA256 , HMACSHA384 , HMACSHA512 -SHA-2 제품군의 SHA-256, SHA-384 및 SHA-512 기능을 사용하십시오. SHA-2는 2001 년에 출판되었습니다. 해시 함수의 이름에서 알 수 있듯이 출력 해시 길이는 각각 256, 384 및 512 비트입니다.


1

다른 답변과 마찬가지로, 인용문의 맥락에서 해싱은 정보 보안에 사용될 수있는 도구이며, 암호화는 정보를 가져 오는 과정으로 권한이없는 사람들이 읽기 / 사용하기가 매우 어렵습니다.


-9

다음은 비밀번호 검색 중 하나를 사용하려는 이유 중 하나입니다.

사용자 비밀번호의 해시 만 저장하는 경우 '비밀번호 분실'기능을 제공 할 수 없습니다.


16
당신은 분명히 받아 들여진 대답을 충분히 읽지 못했습니다. 주의 깊게 읽으십시오 : 암호 검색 기능 을 제공 하지 않아야 합니다. 당신이있어 가정 암호 제공 리셋 기능을. vBulletin, phpBB, e107, IPB, 블로그 및 심지어 자체 맞춤형 CMS를 포함한 여러 웹 사이트를 수년간 관리해 왔습니다. 관리자는 절대 누군가의 사전 해시 암호를 가질 필요가 없습니다. 당신은하지 않습니다. 그리고 당신도 그것을 가져서는 안됩니다. 내가 말하는 것에 동의하지 않으면 내가 틀렸다는 것을 확신시켜 드리겠습니다.
Lakey

3
WAY가 너무 화가 나서 죄송합니다. 너무 많은 웹 사이트가 암호를 일반 텍스트로 저장하는 것을 보았을 때 실망합니다. 참고 사항 : 일부 보안 관련 웹 사이트에서는 사용자가 주기적으로 암호를 변경하도록합니다. 사람들이 비밀번호를 "Password1"에서 "Password2"로 변경하지 않도록합니다. 따라서 나중에 이러한 비교를 수행하기 위해 일반 텍스트 비밀번호를 유지합니다. 좋은 습관이 아닙니다. 이 경우에 필요한 작업은 비밀번호 FIRST에 대한 분석을 수행하여 유사한 비밀번호를 만들어 각 비밀번호를 해시하고 해시 만 저장하는 것 입니다.
Lakey

7
문제 없습니다. 다시 돌아가서 질문을 다시 읽고 추가 연구를하게되었으므로 모두 잃어 버리지는 않았습니다. 건배
Philtron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.