문제

여러 계정에서 정보의 집계자를 실행하는 클라이언트가 있습니다. 데이터베이스는 스크립트에서 나중에 사용할 수있는 방식으로 사용자 이름과 비밀번호를 다른 웹 사이트에 저장하여 해당 웹 사이트에 로그인하여 데이터를 검색해야합니다.

나는 그것들을 평범한 텍스트로 보관하기보다는 저장을 위해 해시 할 수 있다고 생각합니다. 분명히, 누군가는 코드와 데이터베이스에 모두 액세스 할 수있는 경우에도 일반 텍스트 버전에 액세스 할 수 있지만 하나만 있으면 그렇지 않습니다.

더 나은 아이디어가 있습니까?

도움이 되었습니까?

해결책

시스템이 사용자에게 암호를 요청하는 경우 해당 비밀번호를 사용하여 다른 웹 사이트의 비밀번호를 암호화/암호화 할 키를 생성 할 수 있습니다.

이를 사용하면 데이터베이스에 저장된 비밀번호를 해독 할 수 있도록 해당 비밀번호를 입력해야합니다.

더 자세한 흐름은 다음과 같습니다.

  1. 사용자는 시스템에 로그인 할 때 암호 "123456"을 입력합니다.
  2. "123456"비밀번호의 SHA256을 사용하고 키를 가져옵니다.
  3. "8D969 ..."키를 사용하여 데이터베이스의 사이트의 암호를 AES로 해독하는 키를 사용하십시오.

여러 가지 방법으로 이것을 개선 할 수 있습니다. 예를 들어 : Sha Hash를 컴퓨팅하기 전에 암호를 소금에 절인다.

그러한 소금에 대한 실용적인 샘플로서 남자 이름 사용 제안 PBKDF2 (와 함께 HMACSHA-256 두 매개 변수로 Pseudo random function).

기타 향상 : 암호화 된 키의 키를 저장하여 사용자가 모든 비밀번호를 다시 암호화하지 않고도 자신의 암호를 변경할 수 있도록합니다 ... 등 ...

다른 팁

자격 증명을 사용하기 위해 할 수있는 모든 것은 공격자도 할 수 있습니다.

난독 화가 실제로 당신을 사는 것은 무엇입니까? 시간. 직접 사용하는 계획과 마찬가지로 데이터는 결국 거기에 있습니다. 누군가가 당신의 계획이 무엇인지 알아내는 것은 시간 문제 일뿐입니다. 이것은 모두 편집증 수준과 당신이 편한 위험 수준에 대한 평가에 달려 있습니다. 특히, 자격 증명을 저장하는 방법은 데이터베이스를 실행하는 기계에 액세스 할 수있는 사람에 따라야합니다.

결국 고무는 길을 쳤다. 그래서 가서 정복하십시오. 난독 화를 완전히 노크하지 마십시오. 똑똑한 관행과 결합하십시오.

접근과 제안

기계에서 사용할 각 계정에 대한 응용당 API 키 생성

타사 계정에서 API 키를 생성 할 수 있다면 모든 잠재적 응용 프로그램을 종료하지 않고 계정에 대한 액세스를 취소 할 수 있습니다. 많은 서비스에는 이러한 유형의 API 키 (Google, Twitter, StackexChange, Facebook 등)가 있습니다.

단순히 "응용 프로그램"을 설정 한 다음 소비자 키와 비밀뿐만 아니라 액세스 토큰 및 액세스 비밀을 사용하십시오. 기계는 이러한 자격 증명을 저장하면됩니다. 타협이 발생하면 그 키 세트를 취소해야합니다. 또한이를 통해 계정 당 권한을 지정할 수 있습니다.

자격 증명 세트에 사용자 당 비밀번호 사용

사용자가 로그인하면 비밀번호 세트를 잠금 해제합니까? 이렇게하려면 적절한 해싱 체계와 키보다 몇 가지 해싱 단계가 발생하는 검증 검사를 기반으로 키를 생성합니다.

어쨌든 디스크에서 암호화하십시오

항상 하나의 키로 자격 증명을 암호화 할 수 있습니다. 그런 다음 다른 모든 비밀을 보호하는 하나의 키만 보호 할 수 있습니다. 그런 다음 다른 자격 증명에 액세스하기 전에 해독해야합니다.

시스템의 키링에 비밀을 보관하십시오

Linux에서 사용하십시오 그놈-비어 링. 그런 다음 간단한 만들기 읽기 업데이트-날짜 호출을 만들어 비밀번호 데이터베이스로 취급 할 수 있습니다. 그놈 키링은 PKCS#11 표준을 기반으로합니다.

그만큼 그놈-비어 링에는 API가 있습니다 키링 및 검색 품목에 저장하기 위해.

/* A callback called when the operation completes */
static void
found_password (GnomeKeyringResult res, const gchar* password, gpointer user_data)
{
  /* user_data will be the same as was passed to gnome_keyring_find_password() */
  // ... do something with the password ...
  /* Once this function returns |password| will be freed */
}

static void
find_my_password()
{
  gnome_keyring_find_password (GNOME_KEYRING_NETWORK_PASSWORD,  /* The password type */
                               found_password,                  /* callback */
                               NULL, NULL,     /* User data for callback, and destroy notify */
                               "user", "me", 
                               "server", "gnome.org",
                               NULL);
}

Windows 7+에서 "EFS (Encrypted File System)"기능을 사용하십시오. 모든 파일은 인증서로 암호화되어 있으며 Windows 비밀번호로 보호됩니다.

그래도 이것이 당신을 잘못된 보안 감각으로 몰아 넣지 마십시오. 이것이 실행중인 서버 인 경우 누군가가 상자에 네트워크 액세스를 받으면 키링 데이터 자체에도 액세스 할 수 있습니다.

액세스 권한을 부여하는 원격 기계를 설정하십시오

공개 및 개인 키 쌍을 사용하여 자격 증명 또는 잠금 해제 키에 대한 액세스 권한을 부여하는 기계를 설정할 수 있습니까?

해싱에

사용자 이름과 비밀번호를 해시하면 다시 얻지 못합니다. 해시는 단방향 기능으로 설계되었습니다.

당신은 할 수 있습니다 인코딩 그래도 난처한 데이터는 있지만 권장하지는 않습니다.

정보를 해시하면 나중에 정보를 검색 할 수 없습니다. 암호화하면 키를 어딘가에 저장해야합니다. 데이터의 악의적 인 사용 가능성을 제거하기 위해 데이터베이스에 대한 물리적으로 액세스를 제한하는 것을 제외하고 신뢰할 수있는 방법은 없습니다.

해싱은 모든 예측 가능한 방식에서 원래 데이터를 사용하지 않을 수 있습니다. 그러나 데이터를 사용해야합니다. SHA-256과 같은 암호화 해시는 계산적으로 어렵도록 설계되어 (비합리적으로 크기가 크기가 어렵음) 찾기가 m 주어진 H(m) 어디 H 가장 좋아하는 해시 기능입니다.

암호화 경로를 사용하는 경우 암호화 키를 저장해야하며 해독 오라클로 손상되거나 최소한 사용될 수 있습니다. 귀하를 위해 암호 해독을 수행하는 서비스 중개인을 만들고 고객 및 서버 인증 인증서를 모두 사용하여 안전을 보장 할 수 있습니다. 그러나 누군가가 승인 된 클라이언트를 타협하면 계정이 손상 될 수있는 타협과 탐지 사이의 시간이 있습니다. 그러나이 접근법은 더 이상 손상된 클라이언트에 액세스 할 수 없더라도 인증서를 취소하고 서버 액세스를 즉시 거부 할 수있는 유연성을 제공합니다.

직접 연결 (동일한 물리적 스위치)에서만 사용할 수있는 원격 서비스를 설정하고 클라이언트에게 인증하고 모든 클라이언트가 인증을 요구하는 것이 좋습니다. 아마도 클라이언트가 손상되면 남용을 예방하는 데 도움이 될 수있는 쿼리 수를 제한하면 아마도 아마도 남용을 방지하는 데 도움이 될 것입니다. 서비스는 인증서 취소를 확인해야합니다. 모든 요구.

이 서비스는 또한 원격 벌목 시설에 연결되어 있어야하며 시스템을 독립적으로 감사하는 역할을합니다. 이 로깅 서비스는 클라이언트를 다시 인증하고 클라이언트와 함께 인증해야합니다. 로깅 서비스는 데이터를 수신하고이를 로그에 추가하여 수정 또는 삭제를 허용하지 않습니다. 로그 항목을 받으면 타임 스탬프 로그 항목에 디지털 로그인하여 감사 컨테이너에 들어갑니다.

이는 인증서 당국이 타협을 막을 수있는 최상의 복구 모델을 제공하기 위해 인증서 발행을 위해 종이 트레일을 설정하는 방법과 유사합니다.

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