이 질문에 현재 가장 많이 투표 된 내용은 다음 과 같습니다.
보안 관련 문제는 아니지만 보안 문제가 아닌 또 다른 문제는 완전하며 암호 해시와 암호화의 차이점을 파악 하지 못하는 것 입니다. 프로그래머가 안전하지 않은 "암호 기억"기능을 제공하려는 코드에서 가장 일반적으로 발견됩니다.
이 차이점은 정확히 무엇입니까? 나는 항상 해싱이 일종의 암호화라는 인상을 받았습니다. 포스터가 말하는 안전하지 않은 기능은 무엇입니까?
이 질문에 현재 가장 많이 투표 된 내용은 다음 과 같습니다.
보안 관련 문제는 아니지만 보안 문제가 아닌 또 다른 문제는 완전하며 암호 해시와 암호화의 차이점을 파악 하지 못하는 것 입니다. 프로그래머가 안전하지 않은 "암호 기억"기능을 제공하려는 코드에서 가장 일반적으로 발견됩니다.
이 차이점은 정확히 무엇입니까? 나는 항상 해싱이 일종의 암호화라는 인상을 받았습니다. 포스터가 말하는 안전하지 않은 기능은 무엇입니까?
답변:
해싱은 단방향 함수입니다 (매핑, 매핑). 되돌릴 수 없으며 보안 해시 알고리즘을 적용하면 원래 문자열을 다시 가져올 수 없습니다. "충돌"이라고하는 것을 생성하는 것, 즉 동일한 해시를 제공하는 다른 문자열을 찾는 것입니다. 암호화 보안 해시 알고리즘은 충돌이 발생하지 않도록 설계되었습니다. 레인보우 테이블을 사용하여 보안 해시를 공격 할 수 있습니다. 레인보우 테이블 은 해시를 저장하기 전에 소금 을 적용하여 대응할 수 있습니다 .
암호화는 올바른 (양방향) 기능입니다. 뒤집을 수 있으므로 키가있는 경우 맹 글링 된 문자열을 해독하여 원래 문자열을 얻을 수 있습니다.
안전하지 않은 기능은 암호를 암호화하면 응용 프로그램에 어딘가에 키가 저장되어 있으며 데이터베이스 및 코드에 액세스하는 공격자가 키와 암호화 된 텍스트를 모두 가져 와서 원래 암호를 얻을 수 있다는 것입니다 해시에서는 불가능합니다.
사람들은 일반적으로 크래커가 데이터베이스 또는 코드를 소유하고 있다면 암호가 필요하지 않으므로 차이점이 있다고 말합니다. 이는 여전히 사용자 암호를 보호해야 할 의무가 있기 때문입니다. 주로 대부분의 사용자가 동일한 암호를 반복해서 사용하기 때문에 암호를 유출하여 더 큰 위험에 노출되기 때문입니다.
해싱은 단방향 기능이므로 암호를 해시 하면 원래 암호를 해시에서 다시 가져 오는 것이 매우 어렵습니다. 암호화는 양방향 기능으로, 암호화 된 텍스트에서 원본 텍스트를 훨씬 쉽게 가져올 수 있습니다.
일반 해싱은 사전 공격을 사용하여 쉽게 물리 칠 수 있습니다. 공격자는 사전의 모든 단어 (또는 특정 길이까지의 모든 문자 조합)를 미리 해시 한 다음이 새로운 사전을 사용하여 해시 된 비밀번호를 찾습니다. 저장된 각 해시 암호에 고유 한 임의 소금을 사용하면 공격자가이 방법을 사용하기가 훨씬 더 어려워집니다. 기본적으로 사용하는 모든 염분 값에 대해 새로운 고유 사전을 작성하여 공격 속도를 크게 늦출 필요가 있습니다.
암호화 알고리즘을 사용하여 비밀번호를 저장하는 것은 안전하지 않습니다. 사용자 나 관리자가 암호화 된 텍스트에서 원래 비밀번호를 다시 가져 오는 것이 더 쉬운 경우 공격자가 동일한 비밀번호를 사용하는 것이 더 쉽기 때문입니다.
위 이미지에서 볼 수 있듯이 암호가 암호화 된 경우 누군가가 일반 텍스트 암호를 추출 할 수있는 숨겨진 비밀입니다. 그러나 비밀번호가 해시되면 해시 값에서 비밀번호를 복구하는 방법이 거의 없으므로 안심할 수 있습니다.
암호화 된 암호와 해시 된 암호 에서 추출 – 어느 것이 더 낫습니까?
일반 텍스트 비밀번호는 DES, AES와 같은 대칭 암호화 알고리즘을 사용하거나 다른 알고리즘을 사용하여 암호화하고 데이터베이스에 저장할 수 있습니다. 인증시 (사용자 이름 및 비밀번호로 ID 확인) 애플리케이션은 데이터베이스에 저장된 암호화 된 비밀번호를 해독하고 사용자가 제공 한 비밀번호와 동일한 지 비교합니다. 이 유형의 비밀번호 처리 방식에서는 누군가가 데이터베이스 테이블에 액세스하더라도 비밀번호를 재사용 할 수 없습니다. 그러나이 방법에도 나쁜 소식이 있습니다. 누군가가 응용 프로그램에서 사용하는 키와 함께 암호화 알고리즘을 얻는 경우 암호 해독을 통해 데이터베이스에 저장된 모든 사용자 암호를 볼 수 있습니다. "이것이 내가 가진 최선의 선택"이라고 소프트웨어 개발자가 소리를 지르지 만 더 좋은 방법이 있습니까?
예, 여기 요점을 놓친 것일 수 있습니다. 해독 및 비교할 필요가 없다는 것을 알고 계셨습니까? 암호를 일부 변환 된 단어로 변환 할 수있는 단방향 전용 변환 방법이 있지만 역방향 조작 (변환 된 단어에서 암호 생성)은 불가능합니다. 이제 누군가 누군가 데이터베이스에 액세스하더라도 변환 된 단어를 사용하여 비밀번호를 재생성하거나 추출 할 수있는 방법이 없습니다. 이 접근 방식에서는 일부 사용자의 최고 비밀 암호를 알 수있는 방법이 거의 없습니다. 여러 애플리케이션에서 동일한 비밀번호를 사용하여 사용자를 보호합니다. 이 접근법에 어떤 알고리즘을 사용할 수 있습니까?
해싱 알고리즘은 일반적으로 암호화 방식이지만 암호화를 통해 해독 할 수 있지만 해싱은 불가능하다는 것이 주요 차이점입니다.
암호화 기능은 일반적으로 입력을 가져와 동일하거나 약간 더 큰 암호화 된 출력을 생성합니다.
해싱 함수는 입력을 가져와 일반적으로 고정 된 크기의 작은 출력을 생성합니다.
해시 된 결과를 가져 와서 원래의 입력을 되찾기 위해 "해시"할 수는 없지만 일반적으로 동일한 해시를 생성하는 것으로 무차별 대입 할 수 있습니다.
즉, 인증 체계가 암호를 가져 와서 해시하여 암호가 필요한 암호의 해시 버전과 비교하는 경우 실제로 원래 암호를 알 필요는 없으며 해시 만 알고 무차별 대입 할 수 있습니다 비밀번호가 다른 경우에도 일치하는 방법으로 이동하십시오.
해싱 함수는 일반적으로 충돌 가능성을 최소화하고 다른 것과 동일한 해시를 생성하는 것을 계산하기 어렵게 만들기 위해 만들어집니다.
이상적으로는 두 가지를 모두 수행해야합니다.
먼저 단방향 보안을 위해 패스 비밀번호를 해시하십시오. 추가 보안을 위해 소금을 사용하십시오.
그런 다음 암호 해시 데이터베이스가 손상된 경우 해시를 암호화하여 사전 공격으로부터 방어하십시오.
해싱 :
단방향 알고리즘이며 일단 해시되면 롤백 할 수 없으며 이는 암호화에 대한 장점입니다.
암호화
암호화를 수행하면이를 수행 할 수있는 열쇠가 있습니다. 이 키가 유출되면 모든 비밀번호를 쉽게 해독 할 수 있습니다.
반면, 데이터베이스가 해킹되거나 서버 관리자가 DB에서 데이터를 가져 와서 해시 된 비밀번호를 사용한 경우에도 해커는 이러한 해시 된 비밀번호를 해제 할 수 없습니다. PBKDF2에 적절한 솔트 및 추가 보안으로 해싱을 사용하는 경우 실제로 실제로 불가능합니다.
해시 함수를 어떻게 작성해야하는지 보려면 여기 를 방문 하십시오 .
해싱을 수행하는 많은 알고리즘이 있습니다.
MD5 - MD5 (Message Digest Algorithm 5) 해시 기능을 사용합니다. 출력 해시는 길이가 128 비트입니다. MD5 알고리즘은 Ron Rivest에 의해 1990 년대 초에 설계되었으며 오늘날 선호되는 옵션은 아닙니다.
SHA1-1995 년에 게시 된 SHA1 (Security Hash Algorithm) 해시를 사용합니다. 출력 해시는 길이가 160 비트입니다. 가장 널리 사용되지만 오늘날 선호되는 옵션은 아닙니다.
HMACSHA256 , HMACSHA384 , HMACSHA512 -SHA-2 제품군의 SHA-256, SHA-384 및 SHA-512 기능을 사용하십시오. SHA-2는 2001 년에 출판되었습니다. 해시 함수의 이름에서 알 수 있듯이 출력 해시 길이는 각각 256, 384 및 512 비트입니다.
다음은 비밀번호 검색 중 하나를 사용하려는 이유 중 하나입니다.
사용자 비밀번호의 해시 만 저장하는 경우 '비밀번호 분실'기능을 제공 할 수 없습니다.