2010-07-06 4 views
9

새로운 암호화입니다. 당신은 어쩌면 내가 이런 생각 때문에 심지어 아마추어 영리한 해커했다 (또는 그러나 경우하드 코딩 된 키 대신 Java 암호화

나는 javax.crypto의 문서를 보았고,이 코드를 사용하여 작업 할 파일의 암호화도 있고 ...

File saveFile = new File("Settings.set"); 
     saveFile.delete(); 
     FileOutputStream fout = new FileOutputStream(saveFile); 

     //Encrypt the settings 
     //Generate a key 
     byte key[] = "My Encryption Key98".getBytes(); 
     DESKeySpec desKeySpec = new DESKeySpec(key); 
     SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
     SecretKey skey = keyFactory.generateSecret(desKeySpec); 

     //Prepare the encrypter 
     Cipher ecipher = Cipher.getInstance("DES"); 
     ecipher.init(Cipher.ENCRYPT_MODE, skey); 
     // Seal (encrypt) the object 
     SealedObject so = new SealedObject(this, ecipher); 

     ObjectOutputStream o = new ObjectOutputStream(fout); 
     o.writeObject(so); 
     o.close(); 

이 코드가 포함 된 클래스 파일을 열면 암호화 키 (내 암호화 키 98)가 분명히 표시됩니다.

어떻게 암호화 키를 암호화합니까? ... LOL ... 할 수있어?

도움 주셔서 감사합니다.

+0

, 당신이 당신의'암호를 재 설계 할 수 있습니다. getInstance ("DES")'메서드 호출 : http://stackoverflow.com/questions/3180878/exception-in-aes-decryption-algorithm-in-java/3181250#3181250 –

답변

6

공격자가 소프트웨어와 파일에 액세스 할 수 있으면 해커가 해독 할 수 있습니다. 이 문제를 해결할 수있는 몇 가지 방법이 있습니다.

  • 비대칭 키를 사용하십시오. 공개 키로 파일을 암호화하면 개인 키로 만 암호를 해독 할 수 있습니다. 이것은 소프트웨어가 파일의 암호를 해독 할 필요가 없다고 가정합니다.
  • Diffie-Hellman 교환을 사용하십시오. 네트워크를 통해 암호화 된 데이터를 보내려면 공격자가 알지 못하는 사이에 양 당사자가 키를 설정할 수 있습니다.

프로그램에서 데이터를 암호화하고 해독해야하는 경우 수행 할 수있는 작업이 없습니다. 공격자는 단순히 프로그램을 실행하고 해독 된 정보를 볼 수 있습니다.

0

사용자가 암호화 및 암호 해독시 키를 입력하지 않아도 가능하다고 생각하지 않습니다.

전체 소스 코드없이 키를 보는 것이 더 어렵도록 보안을 유지할 수있는 몇 가지 기술을 사용할 수 있지만 안전하지는 않습니다.

+0

도움을 주셔서 감사합니다! – DRJTower

0

프로그램이 자체적으로 파일을 암호화/암호 해독 할 수있는 경우 암호 해독을 수행하는 데 필요한 모든 것이 이미 프로그램에 내장되어 있으므로 결정한 문제 발생자가 암호화 한 파일의 암호를 해독 할 수 있습니다.

가능한 경우 사용자에게 '비밀번호'를 요청하고 암호화/암호 해독 키로 제공 한 것을 사용하십시오.

0

사용자가 자신의 암호화 키를 볼 수 없게하는 것이 중요합니까? 아니면 원 키를 발견하면 사용자가 다른 사람의 키를 알아서는 안됩니다.

사용자에게 개인 키를 묻는 메시지를 표시하고 외부 키를 저장하거나 필요할 때마다 사용자에게 메시지를 보낼 수 있습니다. 그렇게하면 각 사용자의 키가 자신의 키가되며 다른 컴퓨터의 다른 사용자가 저장 한 문서의 암호를 해독하는 데 사용할 수 없게됩니다.

3

공격자는 프로그램에서 수행 할 수있는 모든 작업을 항상 수행 할 수 있으며 일반적으로 많은 작업을 수행 할 수 있습니다. 일을 안전하게하는 유일한 방법은 프로그램의 통제하에 있지 않은 사용 정보입니다. 사용자에게 암호를 입력하거나 운영 체제가 제어하는 ​​상점에 정보를 입력하도록 요청하십시오. 공격자가 TPM (Trusted Platform Module)과 같은 특수 하드웨어를 사용하지 않는 한 실제 액세스 권한이 있거나 어쩌면 많은 권한이있는 경우 나중에는 도움이되지 않습니다.

1

사용자가 추가 입력없이 프로그램에서 데이터를 해독 할 수있는 경우 프로그램에 액세스 할 수 있으면 다른 사람이 파일에 액세스하는 것을 실제로 방지 할 수 없습니다.

Windows 만 타겟팅하는 경우 Data Protection API (DPAPI)을 살펴볼 수 있습니다. 기본적으로 동일한 작업을 수행하지만 암호화에 사용 된 암호는 사용자 (또는 컴퓨터) 범위의 운영 체제로 보호됩니다. 간단히 말하면, 키에 액세스하기 위해 사용자 로그인 (또는 주어진 사용자 계정에서 실행되는 프로그램)이 필요합니다 (또는 시스템의 모든 사용자 로그인에 대한 시스템 범위).

Java에서 API에 액세스하는 방법을 모르지만 Google에서 일부 래퍼 라이브러리를 가져옵니다.

1

키를 하드 코드하지 마십시오. 패스 프레이즈를 입력 할 수있는 사용자가 없다고 가정하면 일반 파일에서 암호화 키를 가져 오도록 코드를 구성한 다음 운영 체제 보안을 사용하여 파일을 안전하게 유지하십시오. 시스템 관리자가 필요하다고 판단 할 때 새 키로 마이그레이션하는 방법을 제공하십시오.

0

가장 안전한 방법은 다음 코드를 사용하여 홈 디렉토리에 user.properties을 넣어, 어떤 암호화를 사용하지 않는 : 사이드 참고로

String userhome = System.getProperty("user.home"); 
String username = system.getProperty("user.name"); 
String hostname = java.net.InetAddress.getLocalHost().getHostName(); 

if (hostname.equals("webserver") && username.equals("root")){ 
ResourceBundle user = ResourceBundle.getBundle(userhome/ "user.properties"); 
} 
관련 문제