문제

데이터베이스 암호를 구성 파일에 저장해야합니다. 명백한 이유로, 나는 그것들을 암호화하고 싶습니다 (바람직하게는 AES와 함께). 역사적으로 성장한 (URGH!) 소스 코드의> 10,000 줄을 가진 기존 프로젝트에 쉽게 도입 할 수있는 델파이 구현을 아는 사람이 있습니까?

설명 : 쉬운 것은 프로젝트에 장치를 추가하여 Max를 추가하는 것을 의미합니다. 구성 파일을 읽고 수행하는 5 줄의 코드 라인. 15 분 이상 걸리지 않아야합니다.

또 다른 설명 : 응용 프로그램의 사용자 관리 체계를 지원하지 않고 DB에 연결하기 위해서는 비밀번호가 필요합니다. 따라서 해시를 사용하는 것은 도움이되지 않습니다. DB 엔진은 앱이 아닌 비밀번호가 유효한지 확인합니다.

도움이 되었습니까?

해결책

두 번째 David Barton의 추천 DCPCrypt 라이브러리. 여러 프로젝트에서 성공적으로 사용했으며 사용 예를 읽은 후 15 분 이상 걸리지 않습니다. MIT 라이센스를 사용하므로 상용 프로젝트 및 그렇지 않으면 자유롭게 사용할 수 있습니다. DCPCrypt는 AES 인 Rijndael을 포함한 여러 알고리즘을 구현합니다.

Googlable 독립형 (단일 단위) 구현도 많이 있습니다. 특정 라이브러리의 수정을 직접 확인할 준비가되어 있지 않으면 문제는 신뢰하는 것입니다.

다른 팁

일반적인 인증 목적으로 비밀번호를 저장할 필요가 없으므로 사용자가 입력 한 암호가 올바른지 확인하면됩니다. 그것이 당신의 경우라면 대신 해시 서명 (예 : MD5)을 저장하고 입력 된 비밀번호의 서명과 비교할 수 있습니다. 두 서명이 일치하면 입력 된 암호가 정확합니다.

암호화 된 암호를 저장하는 것은 누군가가 "마스터"암호를 받으면 모든 사용자의 비밀번호를 검색 할 수 있기 때문에 위험 할 수 있습니다.

MD5를 사용하기로 결정한 경우 Delphi와 함께 제공되는 MessageDigest_5.Pas를 사용할 수 있습니다 (적어도 Delphi 2007 사본에 포함되어 있음). 선택할 수있는 Delphi 소스 코드가 포함 된 다른 구현도 있습니다.

Turbopower Lockbox는 Criptography를위한 훌륭한 라이브러리라고 생각합니다.

http://sourceforge.net/projects/tplockbox/

사용하기에는 너무 큰지 모르겠지만 사용하기가 매우 쉽고 5 줄의 코드로 문자열을 암호화 할 수 있습니다. 그것은 모두 예제에 있습니다.

Tondrej는 올바른 접근 방식을 가지고 있습니다. 가역적 사이퍼를 사용하여 암호를 저장해서는 안됩니다. 올바르게 지적한 바와 같이, "마스터"키가 손상되면 전체 시스템이 손상됩니다. MD5와 같은 비가역적 해시를 사용하는 것이 훨씬 안전하며 해시 값을 명확한 텍스트로 저장할 수 있습니다. 입력 한 암호를 해시 한 다음 저장된 해시와 비교하십시오.

나는 항상 사용자 Turbopower Lockbox입니다. 잘 작동하고 사용하기가 매우 쉽습니다. 실제로 정확히 같은 것을 사용하여 비밀번호를 구성 텍스트 파일에 저장합니다.

http://sourceforge.net/projects/tplockbox/

Turbopower Lockbox 3 (http://lockbox.seanbdurkin.id.au/)은 자동 소금을 사용합니다. IV는 소금에 절인 것이 아니기 때문에 Barton의 DCPCrypt에 대해 권장합니다. 어떤 상황에서는 이것은 매우 심각한 수술 결함입니다.

초기 커뮤니케이션과 달리 LB3의 AES 구현은 표준을 완전히 준수합니다.

나는 이것을 사용했다 도서관, 정말로 추가 할 수 있습니다. 하지만 위키 쇼 더 많은 솔루션.

암호화하더라도 암호 해독 키와 암호화 된 암호가 모두 실행 파일에있을 것 같습니다. 누구나 암호 해독 키와 암호화 된 암호를 가져 와서 원시 비밀번호를 생성 할 수 있습니다.

당신이 원하는 것은 편도 해시입니다.

그냥 알림.

다른 사람들과 상호 작용하지 않아도되면 Libs Crypt Libs가 있으면 DCP 또는 Lockbox가 작업을 수행합니다.

하지만

Rinjdael 사양을 완전히 준수해야한다면 무료 구성 요소를 잊어 버리십시오.

다른 사람들이 지적했듯이 인증 목적으로 가역적 암호화를 사용하여 암호를 저장하지 않아야합니다. 즉, 비밀번호 해시 만 저장하고 저장된 해시에 대해 사용자가 공급 한 암호의 해시를 확인해야합니다. 그러나 그 접근법은 단점이 있습니다. 무지개 테이블 공격, 공격자가 암호 저장소 데이터베이스를 보유해야합니다.

당신이해야 할 일은 사전 선택된 (및 비밀) 소금 값 + 암호의 해시를 저장하는 것입니다. 즉, 소금과 암호를 연결하고 결과를 해시 하고이 해시를 저장하십시오. 인증 할 때는 동일한 작업을 수행하십시오 - 소금 값과 사용자가 제공 한 암호 해시를 연결 한 다음 평등을 확인하십시오. 이로 인해 무지개 테이블 공격은 불가능합니다.

물론 사용자가 네트워크에서 비밀번호를 보내는 경우 (예 : 웹 또는 클라이언트 서버 응용 프로그램에서 작업하는 경우) 암호를 명확한 텍스트로 보내지 않으므로 해시 (salt + 비밀번호) 해시 (salt + hash (password))에 대해 저장하고 확인하고 클라이언트가 사용자가 제공 한 비밀번호를 사전으로 전달하고 네트워크에서 해당 비밀번호를 보내야합니다. 사용자가 여러 목적으로 동일한 암호를 재사용하면 사용자의 비밀번호도 보호합니다.

나는 어떤 종류의 소금을 사용하여 추천합니다. crypt (password)를 구성 파일에 저장하지 않지만이 상점 crypt (salt + password)에 주입하십시오. '소금'으로서 데이터베이스를 열는 데 필요한 것을 사용할 수 있습니다. db_name+user_name. Crypt 함수의 경우 AES, Idea, Des 또는 다른 문자열에서 바이트와 함께 각 바이트를 Xoring하는 것만 큼 간단하게 잘 알려진 알고류를 사용할 수 있습니다. 그 문자열은 키가됩니다. 해결하기 위해 더 다르게 만들려면 임의 바이트를 사용하여 저장할 수 있습니다.

그래서 저장 :

  1. init_str : = 5 랜덤 바이트
  2. new_password : = salt + password // salt : = db_name + user_name
  3. crypted_password = xor_bytes (init_str + new_password, 'my keyphrase')
  4. crypted_password : = init_str + crypted_password
  5. Crypted_password를 구성에 저장하십시오.

그리고 연결하려면 :

  1. 분할 데이터는 구성에서 init_str 및 crypted_password로 읽습니다
  2. new_password = xor_bytes (init_str + crypted_password, 'my keyphrase')
  3. 비밀번호 : = remove (db_name + user_name)에서 new_password

Nick은 물론 맞습니다 - 보안 솔루션을 구현하는 데 15 분을 보내고 싶다고 말할 때 당신이 무엇을하고 있는지 알고 있다고 가정합니다. DCPCrypt 라이브러리는 또한 (더 나은) 경로로 가기로 결정한 경우 여러 해싱 알고리즘을 구현합니다.

몇 가지 솔루션 :

  • 비밀번호를 전혀 저장하지 마십시오. 데이터베이스가 통합 인증을 지원하는 경우 사용하십시오. 프로세스는 특정 ID로 실행되도록 설정하고 데이터베이스에 의해 자동으로 인증 될 수 있습니다.
  • Windows 인증서 상점과 인증서를 사용하여 비밀번호를 암호화하십시오. 애플리케이션에서 비밀번호를 울기 위해 사용 된 키를 저장하는 경우 보안이 거의 없으므로 키도 보호해야합니다.

현재 사용자만이 Acccess가있는 곳에 보관해야합니다.

기본적 으로이 작업을 수행하는 두 가지 방법이 있습니다.

  1. 그것을 저장하십시오 EFS 암호화 파일.
  2. 그것을 저장하십시오 보안 로컬 스토리지.

Internet Explorer는 2를 사용하지만 로컬 액세스를 얻을 수있는 경우 1과 2를 모두 해독 할 수 있습니다. 올바른 마스터 키 및 알고리즘이있는 경우 (예 : IEPV 인터넷 익스플로러 암호로 얻을 수 있습니다).

그래서:
가능하다면 비밀번호 저장을 피하십시오.
대안 (Windows Authentication, Directory Services 등)을 먼저 찾으십시오.

-jeroen

간단하지만 대부분의 응용 분야에서 강력한 시스템은이 Embarcadero의 데모에 의해 제공됩니다.https://edn.embarcadero.com/article/28325

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