2013-01-05 2 views
0

저는 사람들의 돈과 상호 작용하는 신용 ​​카드 프로젝트를 진행하고 있으므로 비밀번호를 저장해야합니다. 이 암호에는 문자 [0-9] 이외의 문자는 포함되어서는 안되며 항상 4 자리 숫자 여야합니다.신용 카드 비밀번호에 가장 적합한 sql 유형

이 암호에 사용할 sql 데이터 형식을 알 수 없습니다. 여기

내가 생각하고있는 상황입니다
A. 내가 int 선택한 경우 그때 내가 암호를 확인해야합니다 Char(4)을 선택한 경우 I 1000 및 9999
사이 B.로 암호를 확인해야합니다 나는 진수 (4,0)를 선택한 경우 다음 나는 그것이 10000 아래에 있다고 확신하지만 난 여전히 것에 대해 그것을 확인해야 C. 숫자 만 (그리고 문자)
수보다 큰 999

무엇을과 같은 비밀번호로 제안 하시겠습니까? ?

+0

사람들에게 핀 코드를 입력하고 저장하도록 요청할 예정입니까?) –

+0

@NPE 이것은 실제 프로젝트이므로 걱정할 필요가 없습니다. –

+0

@beherenow 예 실제로 사람들은 암호를 변경할 수 있습니다. –

답변

3

핀 코드를 Char (4)로 저장해야합니다. 'int'를 선택하면 '0042'와 같은 일부 핀 코드로 인해 문제가 발생합니다. 이는 '0'없이 저장하기 때문입니다. Char (4)를 선택한 경우이 메소드 Char.IsNumber (ch)를 사용하여 핀 코드의 유효성을 검사 할 수 있습니다.

+0

+1 좋은 지적이 Reza입니다. –

+0

모든 핀이 4 자리 수는 아닙니다. 내 은행은 최대 8 개까지 허용합니다. – Bohemian

+0

@ 보헤미안 당신 말이 맞습니다. PIN은 항상 같은 것은 아니지만 제 질문에서 언급 한 것처럼 4 자리입니다. –

2

일반적으로 암호를 저장하면 안되지만 암호는 hash입니다. 그러나 10,000 개의 가능한 암호만으로는 많은 것이 없습니다 — key stretching의 양은 데이터베이스가 손상된 경우 공격자가 4 자리 암호를 강제로 사용하지 못하게합니다. 그러나

, 무엇을 할은, 적어도, (두 개의 동일한 암호가 동일한 암호문에 매핑되지 않도록, 임의의 salt과 함께) 몇 가지 보안 방식에 저장된 키를 사용하여 암호를 암호화하는 것입니다 . 이상적으로 키를 추출 할 수없는 hardware security module에 저장하고 HSM이 암호를 암호화하고 확인하도록해야합니다.

(HSM은 암호를 해독 할 수 없으며 허용되는 쿼리는 "이 암호를 임의의 소금으로 암호화"및 "이 암호가이 암호화 된 문자열과 일치하는지 확인"이 가능해야합니다. 내장 된 속도 제한 기능이있어 공격자가 HSM에 연결된 서버를 인계 받더라도 적어도 모든 암호를 해독하려면 시간이 필요합니다. 이상적으로 모듈은 속도를보고해야합니다. 질의중인 질의 및 성공한 질의의 일부를 물리적으로 분리 된 모니터링 서버로 전송).

어쨌든 신용 카드 데이터를 처리하는 경우 데이터베이스에 다른 필드도 있습니다 안전하게 보관해야합니다. 일반적으로 매우 상세한 산업 규정 및/또는이 모든 것을 규제하는 법률이 있습니다 — 당신이 이미 그들 중 어느 것이 당신에게 적용되는지 그들이 무엇을 말하고 있는지 당신은 이미 확인 했습니까?

+0

사실 우리는 일종의 개인 프로젝트이며 완전한 은행 시스템이 아니기 때문에 당신이 말하는 것에 대한 어떤 규칙이나 법도 체크하지 않았습니다. 그러나 그것의 일부분입니다. 하지만 5 번의 로그인 실패가 발생하면 로그인을 확인합니다. 카드가 DB에 잠겨 사용자가 기관에 와야합니다. 그리고 나는 Encryption and Hashing 제안을 좋아합니다. 왜 전에 계산하지 않았습니까? –