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

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

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

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



답변

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

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

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

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


답변

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

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

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


답변

암호화 및 해시 비밀번호

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


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

암호화가 좋습니까?

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

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

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


답변

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


답변

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

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

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

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

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

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


답변

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

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

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


답변

해싱 :

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

암호화

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

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

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

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

  1. MD5MD5 (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 비트입니다.