2017-09-29 2 views
-2

Yii2에서 SSN 및 계정 번호 암호화에 encryptByKey()를 사용하고 있습니다. 문제는 다시 생성하려고 할 때 동일한 계정 번호에 대해 다른 암호화 된 데이터를 생성한다는 것입니다.Yii2 암호화가 다른 암호화 데이터를 생성합니다.

나는 다음과 같이 데이터베이스에서 일치하지 않을 수 있습니다

Customers::findOne(['account_number'=> Yii::$app->getSecurity()->encryptByKey($account_number, "someKeyHere")]); 

모든 암호화 방법이 동일 암호화 된 데이터를 내가 그것을 암호화 할 때마다 생성 할 수 있습니까?

감사합니다.

답변

1

일반적으로 암호화가 작동하는 방식입니다. 주어진 평문이 암호화 될 때마다 동일한 암호문을 내고 공격자가 패턴에 대한 암호문 모음을 분석 할 수있게하여 보안을 약화시킵니다. "ciphertext indistinguishability."

이 경우 암호화 된 계정 번호 인스턴스 하나만 저장하는 것처럼 보입니다. "메시지"가 결코 반복되지 않기 때문에 암호문의 구별이 불가능하다는 주장을 할 수 있습니다. 따라서 조회 키를 계산하기 위해 ECB 모드 (API가 제공 한 경우) 또는 HMAC (hashData() 메소드에서 제공하는 메시지 인증 코드)의 사용을 정당화 할 수 있습니다. 공격자가 데이터베이스에 액세스하면 각 키의 인스턴스가 하나만 나타나며 아무 것도 공개되지 않습니다.

그러나 공격자가 시스템에서 암호화 한 계정 번호를 제공 할 수 있으면 여전히 안전하지 않습니다. 예를 들어 공격자가 합법적 인 사용자를 배치하고 등록하는 동안 SSN을 제공 할 수 있습니다. 중복 된 번호를 선택하고 데이터베이스를 보면 악의적으로 선택한 암호화 된 값이 합법적 인 레코드와 일치합니다. 또는 시스템이 중복되어 계정 번호를 거부하면 공격자는 합법적 인 사용자가 사용중인 번호임을 알게됩니다. oracle attack.

HMAC (또는 ECB 모드 암호화)를 사용하는 경우 선택한 일반 텍스트 및 오라클 공격을 막기 위해 응용 프로그램을 신중하게 디자인해야합니다. 솔직히, 처음으로 이러한 아이디어를 접하게된다면, 응용 프로그램에서 쉽게 악용되는 취약성을 유발할 수있는 많은 차이가있을 수 있습니다.

+0

고맙습니다 (Y) – Tahir