2013-12-12 1 views
1

온라인 서버에 사용자 이름과 비밀번호를 전송해야하는 PySide 앱을 작성했습니다. 사용자가 QLineEdit 위젯을 통해 암호를 입력 한 후에 암호를 암호화하고 있지만, 이것은 단지 파이썬 코드이므로 모든 사용자가 파일을 열고 암호를 훔쳐 가기 전에 암호를 수정할 수 있습니다. pyc 파일을 배포하는 것은 AFAIK를 디 컴파일 할 수 있기 때문에 보안을 크게 향상시키지 않습니다.안전한 비밀번호 처리를위한 pyside 위젯

제 생각에 누군가가 C++에서 커스텀 QT 위젯을 쓰게하는 것입니다. PyTide 바인딩은 일반 텍스트를 저장하지 않는 수정 된 QLineEdit이지만 외부 키를 기반으로하는 암호화 된 텍스트 만 저장할 수 있습니다. 이것은 바보 같은 생각입니까? 그것은 가능합니까? 다른 옵션이 있습니까? 어떻게 처리할까요?

건배, 첫 번째 인스턴스에서 솔직한

+0

나는 소스 코드 또는 전체 패키지에서 체크섬을 계산 한 다음 체크섬을 공개로 만들 것이다. 그런 식으로 모든 사용자가 코드가 변경되지 않았는지 확인할 수있는 멋진 도구 (자체 검사가 필요함)가 있습니다. 하지만 런타임에 변경 될 수 있습니다. – Trilarion

답변

0

, 당신은 당신에게 aren't echoing the password to the screen를 확인해야합니다. 그러나 QLineEdit이 전체 암호를 저장하지 못하게하는 것은 아마도 안전하지 않을 수 있습니다.

키 입력 명령을 무시하고 들어오는 각 문자를 암호화 할 수 있습니다. 그러나 캐릭터 암호화 당 적어도 오늘은 적어도 A=E 형태로 이루어지지 않습니다.

추가 문자가 들어올 때 문자열의 점진적 해시를 수행 할 수 있지만 백 스페이스를 사용할 수 없기 때문에 사용자가 암호 입력을 시도한 횟수는 1 회입니다. 실수로 손가락이 끼어서 (예 : f 대신 g을 입력하면 실수 한 UI가 아닌 전체 비밀번호를 지우고 다시 시작해야 함).

코드를 편집하는 사용자의 걱정과 관련하여 사용자가 입력 한 암호와 해당 암호를 캡처 한 사람 사이에서 암호를 캡처하는 경우 여기에서 편집증을받습니다. 코드를 보낸 후에는 어느 정도까지 제어 할 수 있습니다. 관련 부분에 적절한 MD5 해시 코드를 배포 할 수 있으며 런타임에 코드가 변경되지 않았는지 확인할 수 있습니다.

누군가 그 프로그램에 임의의 코드를 주입 ​​할 수있는 능력이 있다면, 더 큰 문제가 있습니다. 나는 당신의 프로그램이 안전하지 않다는 말은 아니지만 누군가가 악의적 인 사람이 코드를 가진 컴퓨터에 접근 할 수 있다면 하드웨어 또는 소프트웨어 키로거를 쉽게 삽입 할 수있다.

코드를 가능한 한 안전하게 작성하고, somepoint에서 비밀번호가 일반 텍스트로 어딘가에 저장되고 사용 가능한 첫 번째 기회에 인코딩되도록합니다. 예 :

import mySecureLibrary 
password = mySecureLibrary.saltAndHash(self.ui.passwordField.text()) 
self.ui.passwordField.setText("HAHA, no password for you") 
+0

정보를 제공해 주셔서 감사합니다. 이런 상황을 처리해야 할 때가 처음인데, 이런 종류의 정보를 매우 감사하게 생각합니다! –

1

실제로 "어리석은"아이디어는 아닙니다. 그것은 그것이 효과가 없을 것입니다.

누구나해야 할 일은 코드의 다른 부분을 편집하고 QApplication 인스턴스에 event filter을 설치하는 것입니다. 이를 통해 사용자는 커스텀 QLineEdit에 도달하기 전에 모든 키보드 이벤트를 포착 할 수 있습니다.

PySide 응용 프로그램의 일부를 차단하려고 시도하면 절대로 작동하지 않습니다. 하루가 끝나면 파이썬 프로그램입니다. 심지어 실행 파일에 동결 시켜서 전체 애플리케이션을 차단하려고 시도하는 경우에도 모든주의 사항이 있습니다 (유용한 토론에 대해서는 "How do I protect Python code?"참조).

당신은 결코상관없이 당신이 (상관없이 당신이 사용하는 어떤 언어 또는 라이브러리)하지 않는다 무엇 모든 구멍을 연결하지 것입니다.

어디에서나 숨을들이 마시고 어딘가에 인공 선을 그어 놓아야합니다.

+0

아주 좋은 지적, 감사합니다. 나는 조금 더 읽고 어떻게 든 결정을 내릴 것이다. –