데이터베이스에서 이메일 주소를 암호화하는 것이 가치가 있습니까?

StackOverflow https://stackoverflow.com/questions/70450

  •  09-06-2019
  •  | 
  •  

문제

나는 이미 사용하고 있습니다 솔티드 해싱 데이터베이스에 비밀번호를 저장하려면 무지개 테이블 공격.

그래도 나는 생각했다 :누군가가 내 데이터베이스를 장악하면 어떻게 되나요?여기에는 사용자의 이메일 주소가 포함됩니다.알림 이메일 등을 보내는 데 사용할 것이기 때문에 실제로 해시할 수는 없습니다.

암호화해야 하나요?

도움이 되었습니까?

해결책

Bruce Schneier는 이런 종류의 문제에 대해 좋은 반응을 보였습니다.

암호화는 보안 문제에 대한 해결책이 아닙니다.그것은 해결책의 일부일 수도 있고, 문제의 일부일 수도 있습니다.많은 상황에서 암호화는 문제를 악화시키는 것부터 시작하며, 암호화를 사용하는 것이 개선된다는 점은 전혀 명확하지 않습니다.

기본적으로 만일의 경우를 대비해 데이터베이스에서 이메일을 암호화한다고 해서 실제로 데이터베이스가 더 안전해지는 것은 아닙니다.데이터베이스의 키는 어디에 저장되어 있나요?이 키에는 어떤 파일 권한이 사용됩니까?데이터베이스에 공개적으로 액세스할 수 있나요?왜?이 계정에는 어떤 종류의 계정 제한이 적용되어 있나요?기계는 어디에 저장되어 있으며 누가 이 상자에 물리적으로 접근할 수 있습니까?원격 로그인/Ssh 액세스 등은 어떻습니까?등.등.

따라서 원할 경우 이메일을 암호화할 수 있다고 생각합니다. 하지만 그것이 시스템 보안의 범위라면 실제로는 많은 일을 하지 않으며 실제로 데이터베이스 유지 관리 작업을 더 어렵게 만들 것입니다.

물론 이는 시스템에 대한 광범위한 보안 정책의 일부일 수 있습니다. 그렇다면 좋습니다!

나는 이것이 나쁜 생각이라고 말하는 것이 아닙니다. 하지만 문 주변의 합판을 잘라낼 수 있는데 왜 Deadlocks'R'us의 문에 5,000달러의 비용이 드는 자물쇠를 달고 있습니까?아니면 열어둔 창문으로 들어오시나요?아니면 심지어 현관 매트 밑에 남겨둔 열쇠를 발견한 경우도 있습니다.시스템의 보안은 가장 취약한 링크만큼만 우수합니다.루트 액세스 권한이 있으면 원하는 작업을 거의 수행할 수 있습니다.

스티브 모건 이메일 주소를 이해할 수 없더라도 여전히 많은 해를 끼칠 수 있다는 점을 지적합니다(SELECT 액세스 권한만 있는 경우 완화될 수 있음).

이메일 주소를 저장하는 이유가 무엇인지 아는 것도 중요합니다.내가 좀 지나쳤을 수도 있어 이 답변, 하지만 제 요점은 정말로 계정의 이메일 주소를 저장해야 합니까?입니다.가장 안전한 데이터는 존재하지 않는 데이터입니다.

다른 팁

나는 이것이 죽은 주제라는 것을 알고 있지만 이것 뒤에 있는 Arjan의 논리에 동의합니다.제가 지적하고 싶은 몇 가지 사항이 있습니다.

누군가가 귀하의 소스 코드를 검색하지 않고도 귀하의 데이터베이스에서 데이터를 검색할 수 있습니다(예:SQL 주입, 타사 DB).이를 염두에 두고 키를 사용한 암호화 사용을 고려하는 것이 합리적입니다.그럼에도 불구하고 이것은 보안을 위한 추가 조치일 뿐이며 보안이 아닙니다...이것은 일반 텍스트보다 이메일을 더 비공개로 유지하려는 사람을 위한 것입니다. 업데이트 중에 뭔가가 간과되거나 공격자가 이메일을 검색하는 경우가 있습니다.

IMO: 이메일을 암호화할 계획이라면 솔트 해시도 저장하세요.그런 다음 검증을 위해 해시를 사용하고, 대량의 데이터 문자열을 찾기 위해 지속적으로 암호화를 사용하는 오버헤드를 절약할 수 있습니다.그런 다음 이메일을 사용해야 할 때 이메일을 검색하고 해독할 수 있는 별도의 비공개 기능을 갖추세요.

대부분의 보안 요구 사항과 마찬가지로 위협 수준을 이해해야 합니다.

이메일 주소가 손상되면 어떤 피해를 입을 수 있나요?

그런 일이 일어날 가능성은 얼마나 되나요?

이메일 주소를 교체하는 경우 발생하는 피해는 노출되는 경우보다 훨씬 클 수 있습니다.특히 예를 들어 이메일 주소를 사용하여 보안 시스템에 대한 비밀번호 재설정을 확인하는 경우에는 더욱 그렇습니다.

비밀번호를 해시하면 비밀번호가 대체되거나 노출될 가능성이 훨씬 줄어들지만, 어떤 다른 통제 수단을 갖고 있는지에 따라 달라집니다.

나는 그것이 데이터베이스의 적용에 달려 있다고 말하고 싶습니다.

가장 큰 문제는 암호화 키를 어디에 저장하느냐는 것입니다.왜냐하면 해커가 귀하의 DB보다 더 많은 것을 갖고 있다면 귀하의 모든 노력이 아마도 낭비될 것이기 때문입니다.(암호를 해독하고 암호화하려면 응용 프로그램에 해당 암호화 키가 필요하므로 결국 해커가 암호화 키와 사용된 암호화 체계를 찾을 수 있다는 점을 기억하십시오.)

찬성:

  • DB 유출 오직 이메일 주소는 노출되지 않습니다.

단점:

  • 암호화는 성능 손실을 의미합니다.
  • 불가능하지는 않더라도 데이터베이스 작업 할당이 더 어려울 것입니다.

실수로 암호화를 난독화와 혼동하지 마십시오.우리는 일반적으로 스팸을 방지하기 위해 이메일을 난독화합니다.많은 웹사이트에는 크롤러가 이메일 주소를 잠재적인 스팸 대상으로 분석하는 속도를 늦추기 위해 "webmaster _at_ mysite.com"이 있습니다.이는 HTML 템플릿에서 수행되어야 합니다. 영구 데이터베이스 저장소에서는 이 작업을 수행할 가치가 없습니다.

전송 중에 비밀을 유지해야 하는 경우가 아니면 어떤 것도 암호화하지 않습니다.귀하의 데이터는 언제 어디서 전송됩니까?

  1. SQL 문은 클라이언트에서 서버로 전송됩니다.같은 상자에 있는 건가요, 아니면 보안 연결을 통한 건가요?

  2. 서버가 손상된 경우 의도하지 않은 전송이 발생합니다.이것이 걱정된다면 서버를 보호해야 할 것입니다.내부 위협뿐만 아니라 외부 위협도 있습니다.모든 사용자(외부 및 내부)가 적절하게 인증되고 권한이 부여됩니까?

  3. 백업 중에 의도적으로 백업 미디어로 전송됩니다.진행되는 동안 암호화하는 보안 백업 전략을 사용하여 수행됩니까?

SQL Server와 Oracle(및 다른 DB도 마찬가지)은 모두 데이터베이스 수준에서 데이터 암호화를 지원합니다.무언가를 암호화하려는 경우 데이터베이스 서버 측에서 암호화할 수 있는 데이터에 대한 액세스를 단순히 추상화하고 암호화된 데이터를 사용할지 여부(이 경우 SQL 명령은 다름)를 사용자가 선택하도록 두는 것이 좋습니다.사용자가 암호화된 데이터를 사용하려는 경우 데이터베이스 서버를 구성할 수 있으며 키 관리와 관련된 모든 유지 관리 작업은 귀하가 아닌 DB 공급업체에서 만든 표준 DBA 도구를 사용하여 수행됩니다.

내 답변 사본은 다음과 같습니다. 사용자 이메일 주소를 데이터베이스에 저장하는 가장 좋고 안전한 방법은 무엇입니까?, 단지 검색을 위해서...


일반적으로 나는 노력할 가치가 없다는 다른 사람들의 의견에 동의합니다.그러나 귀하의 데이터베이스에 액세스할 수 있는 사람은 누구나 귀하의 키를 얻을 수 있다는 점에는 동의하지 않습니다.이는 확실히 SQL 주입의 경우에는 해당되지 않으며, 분실되거나 잊어버린 백업 복사본의 경우에도 해당되지 않을 수 있습니다.그리고 나는 이메일 주소가 개인적인 세부 사항이라고 생각하므로 스팸에는 관심이 없고 주소가 공개될 때 개인적인 결과에 관심이 있습니다.

물론, SQL 주입이 두려우면 그러한 주입이 금지되는지 확인해야 합니다.그리고 백업 복사본은 자체적으로 암호화되어야 합니다.

그럼에도 불구하고 일부 온라인 커뮤니티의 경우 회원은 자신이 회원이라는 사실을 다른 사람이 알기를 원하지 않을 수 있습니다(예: 정신 건강 관리, 재정 지원, 의료 및 성적 조언, 성인 오락, 정치 등과 관련).이러한 경우 가능한 한 적은 수의 개인 정보를 저장하고 필요한 정보를 암호화하는 것은 그리 나쁜 생각이 아닐 수 있습니다(데이터베이스 수준 암호화는 SQL 주입을 사용하여 세부 정보를 표시하는 것을 방지하지 않습니다).다시:이메일 주소를 개인 정보로 취급합니다.

많은 사이트의 경우 위의 내용은 사실이 아닐 수 있으므로 금지하는 데 중점을 두어야 합니다. SELECT * FROM SQL 주입을 통해 방문자가 URL을 변경하여 다른 사람의 개인 프로필이나 주문 정보에 접근할 수 없도록 합니다.

데이터베이스에서 데이터를 암호화하는 것은 가치가 있습니다. 올바른 방식으로 암호화하면 조금 더 어려워지는 것이 아니라 훨씬 더 어려워지므로 철학을 멈추고 민감한 데이터를 암호화하세요. ;)

누군가 해당 이메일 주소를 얻는 최악의 시나리오, 누군가가 해당 이메일 주소를 얻을 가능성, 변경 사항을 적용하는 데 필요한 추가 노력/시간을 고려해야 합니다.

@루

나는 당신이 말하는 것에 어느 정도 동의하지만 누군가가 데이터를 얻기 어렵게 만들기 위해 데이터를 암호화하는 것은 가치가 있지 않습니까?

당신의 추론에 따르면, 집에 자물쇠나 경보기를 두는 것은 또한 쉽게 손상될 수 있기 때문에 쓸모가 없을 것입니다.

내 답변:

잘못된 사람의 손에 넘어가고 싶지 않은 민감한 데이터가 있다면 100% 완벽하지는 않더라도 해커가 이를 얻을 수 있도록 최대한 열심히 해야 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top