2011-08-31 3 views
0

사용자 액세스를 위해 온라인 mysql 데이터베이스를 사용하는 VB 응용 프로그램이 있습니다. 온라인 데이터베이스에는 사용자가 액세스 할 수있는 항목을 결정하기 위해 사용자 이름, 암호, 한자리 수 (기본적으로 예/아니오) 필드가있었습니다. 사용자가 로그인하면 데이터베이스는 모든 '예'응답을 검색하여 해당 버튼을 활성화하고 '아니오'응답을 모두 검색하여 해당 버튼을 비활성화합니다.VB - 오프라인 인증을위한 등록 데이터 해시

내 문제는 주어진 사용자가 온라인 상태가 아닐 가능성이 매우 높습니다. 그래서 온라인 데이터베이스를 로컬 장치에 복사하는 것을 생각했습니다. (이 프로그램은 인터넷이 있거나 없을 수도있는 Windows 태블릿에서 실행될 것입니다. 인터넷 연결이 불가능할 수도 있습니다.) 사용자가 다른 태블릿을 사용할 수 있고 해당 장치가 사용자가 액세스 할 수있는 항목을 알지 못한다는 것을 제외하고는 충분합니다 (인터넷 연결이 부족한 경우).

내 새로운 접근 방식은 사용자가 이름, 성, 전화 번호 및 전자 메일 주소를 제공하도록 등록하는 것입니다. 이 시점에서 나는 그들이 사용하도록 승인 된 버튼을 선택할 것입니다. 모든 정보를 코드 (해시 일 가능성이 있음)에 넣어서 다음에 사용자가 로그인 할 때 (온라인 또는 오프라인), 이름, 성 및 생성 된 코드를 사용합니다. 사용자는 다른 장치로 이동하여 여전히 동일한 결과를 얻을 수 있습니다. 나는 이것이 의미가 있기를 바랍니다.

기본적으로 사용자가 정보를 등록하고 함께 묶는 코드를 수신 할 수있는 방법을 찾고 있는데 (실제로 해시가 관련되어 있음), 실행중인 모든 Windows 태블릿에 로그온하십시오. 장치가 없어도 내 프로그램을 사용하여 승인 된 사용자의 새 목록을 다운로드 할 필요가 없습니다.

미리 감사드립니다.

+0

*** 결코 *** 데이터베이스 멋진 –

답변

0

해시는 부분 인입니다.하지만 전체적인 것은 아닙니다. 해시의 핵심 부분은 되돌릴 수 없으므로 해시를 사용하여 활성화/비활성화 할 버튼과 같은 정보를 전달할 수 없습니다. 시스템의 다른 곳에서 해시를 구현해야하는 것처럼 들리지만 절대 해킹되지 않은 암호를 저장하지 마십시오. 이 질문에 필요한 나머지 부분은 보안 확인 번호입니다.

아이디어는 숫자의 다른 부분이 다른 의미를 갖는 몇 개의 구멍/빈 공간이있는 숫자를 생성한다는 것입니다. 이 같은 보일 수 있습니다 :

4325_-23R3_-F257_-D982_-을 _ _

이러한 문자 중 일부는 해당하는 다른 문자의 비트 사용자 정보의 해시입니다 예/아니오 데이터베이스 입력란에 입력하십시오. 이 정도면, 누락 된 공백에 속하는 문자를 계산하는 알고리즘 (보안 키 사용)을 얻은 다음 최종 숫자를 사용자에게 발행 할 수 있습니다. 소프트웨어는 사용자가 입력 한 번호를 사용하고 입력 한 점검 숫자와 일치하는 체크 디지트를 확인합니다.

이 접근 방식에는 단점이 있습니다. 오프라인 정품 인증을 허용한다는 것은 제품과 함께 체크 디지트를 계산하는 데 사용되는 키를 포함하는 것을 의미하며 어떤 종류의 물건을 야생 크래커에 넣으면 모든 디지털 보안과 마찬가지로 에 도착할 수있는 방법을 찾을 수 있습니다.


이제는 현재 코드의 큰 구멍이있는 보안 구멍으로 넘어 갑시다. 데이터베이스에 사용자 이름과 암호가 저장되어 있다고 명시합니다.난 그냥 일을 단순화하고 바라고 있지만, 내가 양심에 도전받지를 떠날 수 없다 그 시점에하는 문제입니다. 실제 암호를 저장하는 대신 암호를 해시하고 해시 만 저장해야합니다. 누군가가 로그인하려고 할 때 사용하려고 시도한 암호를 해시하고 해시를 비교합니다. 이것은 큰 문제, 당신이 그 일을하지 않는 경우, 당신은 그것을 잘못 을하고 있습니다. 또한 조금을 지나치게 단순화

. 또한 해싱하기 전에 암호를 해독하여 일반적인 해시 결과에 대한 사전 공격을 막을 수 있습니다. 또한 해시 알고리즘의 선택이 중요합니다. MD5는 여기에서 자르지 않습니다. 가장 좋은 옵션은 bcrypt 또는 scrypt이지만, 꼭해야한다면 sha1을 사용할 수 있습니다.

여기서 가장 중요한 점은 결코 자신의 인증 시스템을 구축해야한다는 것입니다. 그것은이 모든 테스트를 통과 충분히 가까이 쉽게, 그러나 아직도 년 후 당신이 6 개월 전에 해킹 된 찾을 때까지 모르는 몇 가지 미묘한 방법으로 잘못된 것입니다. 대신, 기존 플랫폼에서이를 처리 할 수있는 미리 작성된 구성 요소 또는 제품을 찾으십시오. 이 영역을 전문으로하는 프로젝트 (및 프로그래머)의 코드에 가능한 많이 의존하십시오.

+0

에서 실제 암호를 저장, 그래서 나는 내 연구를 촉진 할 수있는 여기에 몇 가지 좋은 키워드를 가지고있다. 분명히 해시가 필요하지만 더 중요한 것은 '보안 수표'입니다. 당신이 설명하는 것이 근본적으로 내가 찾고있는 것이기 때문에 나는 그 옵션을 연구하는데 약간의 시간을 할애 할 것이다. 감사. – Brandon

관련 문제