암호화를 되돌릴 수 없습니까?


9

암호화 된 문자열을 해독 할 수 없으므로 원래 값이 영원히 손실된다는 인상을 받았습니다.

그러나 다음 문자열이 항상 "dominic"(내 이름)과 같으면이 를 뒤집는 논리적 방법이 없습니다. 무작위가 아니고 날짜 / 시간을 기준으로하지는 않지만 논리적 인 방법이 있습니까?

0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=

"dominic"(문자열)을 몇 번이나 암호화하더라도 항상 위와 같습니다. 따라서 문자열을 해독하는 방법이 없어야합니까?

내가 말하는 것의 예 :

public string EncryptPassword(string password)
{
    return Convert.ToBase64String(
        System.Security.Cryptography.SHA256.Create()
        .ComputeHash(Encoding.UTF8.GetBytes(password)));
}

3
이름 의 암호 해시 (종종 암호에 사용됨)에 대해 이야기하고 있습니까? 또는 암호화 (권한이 해독 할 목적으로)?

11
SHA256A는 암호화 해쉬 함수 가 아닌 암호 알고리즘. 그것은 일방 통행 기능 입니다.

1
의무 면책 조항 : 해시 소금 ( en.wikipedia.org/wiki/Salt_(cryptography) ). 또한 SHA256은 GPU와 같은 무차별 대입 공격에 문제가 발생하기에는 너무 빠릅니다. PBKDF2 또는 scrypt와 같은 것을 사용하는 것이 좋습니다.
Maciej Piechotka

7
해싱은 고기 분쇄기와 같습니다. 젖소를 갈은 소고기로 바꿀 수는 있지만 그 반대는 불가능합니다.
닐 맥기 건

1
공개 / 개인 키 암호화에 혼란이 있습니까? 다른 사람이 공개 키를 사용하여 메시지를 암호화하면 해당 메시지를 스스로 해독 할 수 없습니다. 오직 NSA, Mossad, FSB 및 Tiroler Geheimdienst와 같이 이것을 해독 할 수 있습니다.
ott--

답변:


39

암호화 는 항상 되돌릴 수 있습니다. 암호화 의 핵심은 키를 가진 다른 사람 만 암호화를 취소하고 메시지를 읽을 수 있도록 메시지를 가져 와서 비밀 키로 인코딩하는 것입니다 .

당신이 여기에서 찾고있는 것은 해시 암호화 기술은 종종 해시 구현에 사용되는 불구하고, 암호화와 동일하지 않습니다. 해시의 개념은 복잡한 수학적 기술을 사용하여 반복 가능한 이전 값에 매핑되는 새 값을 작성한다는 것입니다. 열쇠가 없으며 뒤집을 의도는 없습니다. 강력한 암호화 기법 해시는 당신이 가치가있는 경우, 그 수학적 속성을 만들어 A그 해시 값을 B, 그것은 의도적으로 다른 값 만들기 위해 매우 어려운 C도에 해시 B.

해시는 인증에 사용되므로 되돌릴 필요가 없습니다. 사용자 이름과 비밀번호를 알려 주면 데이터베이스에 비밀번호를 저장하고 싶지 않습니다. 누군가 해킹하여 내 데이터베이스에 액세스하면 비밀번호를 얻을 수 있기 때문입니다! 대신 데이터베이스에 비밀번호 해시를 저장 합니다. 그런 다음 로그인 할 때 보낸 비밀번호의 해시와 일치하는 비밀번호 항목을 사용하여 사용자 이름과 일치하는 사용자 이름이 있는지 확인합니다. 그렇다면 해시 충돌을 만들기가 매우 어렵 기 때문에 인증됩니다 ( 좋은 해시를 사용하여 동일한 값으로 해시하는 두 개의 값), 사용하는 암호가 올바른지 거의 완벽하게 확신합니다.

강력한 암호화 해시의 또 다른 속성은 뒤집기가 매우 어렵다는 것입니다. 당신은 그 가치를 알아 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=냈기 때문에 그 가치 는 "주요한"의 해시라는 것을 알고 있습니다. 그러나 당신이 그것을 알지 못하고 어디에서 시작할지 몰랐다면 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=, 당신이 가진 모든 것이 문자 그대로 수십억을 차지할 수 있습니다 해시가 좋은 것이면 원본이 "주"였다는 것을 알 수 있습니다. 다시 말하지만, 비밀번호 목록을 도난 당했을 때 부수적 인 피해를 방지하는 데 유용합니다.


2
알려진 단어 목록을 가져 와서 해시 일치를 찾을 때까지 반복 할 수 없습니까? 더 안전한 웹 사이트를 위해 비밀번호에 대문자와 숫자를 추가하는 것이 좋습니다.
user1477388

15
@ user1477388 : 그렇습니다 . 바로 웹 사이트에서 제안하는 이유입니다. 이것은 해시 된 암호를 공격하는 잘 알려진 방법입니다. 명백한 이유로 "사전 공격"이라고하며 사전에없는 단어를 사용하는 것이 암호를 안전하게 보호하는 중요한 단계입니다.
Mason Wheeler

1
이 같은 외모는 "이 어떻게 든 되돌릴 수 없습니다 믿고 무능력"내에 좋은 통찰력을 가지고 security.stackexchange.com/questions/11717/... 나는 / 원하는 그들을 반대 할 필요가 있음을 안; 그냥 궁금 해서요
user1477388

3
또 다른 제안은 해시되기 전에 각 암호에 고유 한 것을 추가하는 것입니다. 한 문자 암호 차이로 인해 완전히 다른 해시가 만들어 지므로 모든 해시 결과는 고유합니다. 그렇지 않으면 해커가 "password123"이라는 단어의 해시를 발견하면 해당 해시가있는 모든 사용자 이름에 대해 해시를 사용하는 것을 알게됩니다. 그래도 이런 종류의 일에 좋은 머리를 가지고있는 것처럼 들립니다. 행운을 빕니다.
Katana314

1
@MasonWheeler : 사전에없는 단어를 사용하는 것은 실제로 필요하지 않습니다. 특히 일반적인 공격에 사용되는 "사전"이 옥스포드 사전과 다른 점이 아니라 암호에 자주 사용되는 것으로 알려진 문자열 목록을 고려할 때 . 이러한 단어를 피하는 대신 2000 개 정도의 단어 목록에서 5 개의 임의의 단어를 선택하는 것이 좋습니다. 2000 단어 사전이 알려진 경우에도 이러한 암호는 거의 100 배 더 오래 걸립니다. 64 개 중 8 개 이상의 임의의 문자를 사용하십시오.
tdammers

9

당신이하는 일은 "암호화"그 자체가 아닙니다. "해싱"입니다. 이 두 가지의 주요 차이점은 암호화 쉽게 되돌릴 수 있다는 것 입니다 (물론 올바른 키를 사용하여). 해시는 원래 메시지를 아는 것 이외의 다른 상황에서는 되돌릴 수 없도록 설계되었습니다.

이론적으로 해시는 "무작위 오라클", 즉 아이덴티티 메모리를 가진 가상의 균류와 상한 범위없이 완벽하게 고유하고 완벽하게 임의의 숫자를 생성하는 방법을 시뮬레이션합니다. 이 작은 사람에게 메시지를 보내면 두 가지 중 하나가 일어날 것입니다. 그는 이전에 메시지를 보지 못했습니다.이 경우 새 임의의 숫자를 생성하여 다이제스트로 제공하거나 이전에 해당 메시지를 보았으므로 메시지를 볼 때 생성 한 숫자를 기억하고 알려줍니다 처음으로. 이 이론적 모델에서는 메시지와 다이제스트 사이에 관계가 없으며 RNG에서 단일 번호가 두 번 표시되지 않으면 충돌 가능성이 없습니다.

불행히도 이상적인 랜덤 오라클은 없습니다. 이 아이디어는 오라클이 어디에서나 해시 한 모든 메시지를 효율적으로 저장하고 효율적으로 리콜 할 수있는 능력, 클라이언트가 십진수 또는 수십만 자릿수의 숫자를 받아 들일 수있는 능력과 같은 디지털 구현에 실질적인 불가능 성을 가지고 있습니다. 길이. 대신, 메시지 자체에서 작동하는 돌이킬 수없는 (단방향) 수학 연산 인 해시 함수가있어 명백 하지 않은 결정적 변환 (동일한 메시지 => 동일한 해시)을 만듭니다.해시와 원본 메시지의 관계. 주석에서 언급 한 것처럼 메시지를 체계적으로 변경하여 생성 된 해시 값에 대한 예측 가능한 변경도 없어야합니다. 메시지의 단일 비트가 변경되면 다이제스트의 각 비트가 50 %의 확률로 변경 될 수 있습니다.

해시 함수에는 여러 가지 용도가 있습니다. 두 당사자 모두 일반 텍스트 비밀을 알 필요없이 챌린지 확인 (암호와 같은 로그인 자격 증명 생각)에 사용되며 메시지가 변조되거나 손상되지 않았 음을 확인하는 체크섬으로 사용됩니다. 또한 소위 "작업 증명"시나리오에서도 사용됩니다. 완료하기는 쉽지만 검증하기 쉬운 계산 작업.

SHA256 해시 다이제스트를 효율적으로 되돌려 해시를 발생시키는 메시지 (모든 메시지)를 생성하는 방법을 찾은 경우 실제로 해시가 근본적으로 손상되었음을 증명하는 증거가됩니다. 실제로 SHA256은 안전하다고 믿습니다. 아무리 실용적이든 해시 다이제스트로 시작하여 단순히 모든 가능성을 시도하는 것보다 적은 작업이 필요한 충돌 메시지를 생성하는 문서화 된 방법이 없음을 의미합니다 (SHA-256의 경우 2 이상). ^ 256 ~ = 10 ^ 77 가능성).


이상적인 해시 함수에서 입력의 1 비트 변경으로 인해 출력 비트의 50 %가 변경되어야합니다. 이것을 눈사태 효과 라고합니다 .
CVn

2
@ MichaelKjörling : 정확하게 말하면, 각각의 비트는 50 % 확률로 변경 될 것으로 예상되는데, 이는 평균적으로 비트의 50 %가 변경 될 것으로 예상하는 것과는 다릅니다 (그러나 암시합니다).
Dietrich Epp

@DietrichEpp 실제로, 필자가 링크 한 Wikipedia 기사는이를 명확하게하지만 최종 사용자가 두 입력간에 변경되는 비트 수를 수량화하는 것이 더 쉽다.
CVn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.