diff --git a/client/src/main/java/client/gui/GuiServer.java b/client/src/main/java/client/gui/GuiServer.java index 7adbaf6..9be22d0 100644 --- a/client/src/main/java/client/gui/GuiServer.java +++ b/client/src/main/java/client/gui/GuiServer.java @@ -97,7 +97,7 @@ public class GuiServer extends Gui implements FieldCallback { if(GuiServer.this.keypair == null) { GuiServer.this.keypair = EncryptUtil.createKeypair(); GuiServer.this.keyDigest = EncryptUtil.getXorSha512Hash(GuiServer.this.keypair.getPublic().getEncoded()); - GuiServer.this.keyLabel.setText("Anmelde-Pubkey: RSA-2048 " + GuiServer.this.keyDigest); + GuiServer.this.keyLabel.setText("Anmelde-Pubkey: RSA-4096 " + GuiServer.this.keyDigest); GuiServer.this.keyButton.setText("Schlüsselpaar entfernen"); GuiServer.this.passLabel.setText("Ersatz-Passwort (mind. 8 Zeichen)"); GuiServer.this.copyKeyButton.enabled = true; @@ -124,7 +124,7 @@ public class GuiServer extends Gui implements FieldCallback { GuiServer.this.encToggle.setValue(reqEnc); GuiServer.this.serverKey = key; GuiServer.this.serverDigest = sdigest; - GuiServer.this.idLabel.setText("Server-Pubkey: " + (key != null ? "RSA-2048 " + GuiServer.this.serverDigest : "nicht vorhanden")); + GuiServer.this.idLabel.setText("Server-Pubkey: " + (key != null ? "RSA-4096 " + GuiServer.this.serverDigest : "nicht vorhanden")); GuiServer.this.resetButton.enabled = key != null; GuiServer.this.copyIdButton.enabled = key != null; GuiServer.this.copyKeyButton.enabled = !confirmed; @@ -138,7 +138,7 @@ public class GuiServer extends Gui implements FieldCallback { else { GuiServer.this.keypair = keys; GuiServer.this.keyDigest = digest; - GuiServer.this.keyLabel.setText("Anmelde-Pubkey: RSA-2048 " + GuiServer.this.keyDigest); + GuiServer.this.keyLabel.setText("Anmelde-Pubkey: RSA-4096 " + GuiServer.this.keyDigest); GuiServer.this.keyButton.setText("Schlüsselpaar entfernen"); GuiServer.this.passLabel.setText("Ersatz-Passwort (mind. 8 Zeichen)"); } @@ -154,11 +154,11 @@ public class GuiServer extends Gui implements FieldCallback { } }, "Kopieren")); this.copyKeyButton.enabled = this.keypair != null; - this.keyLabel = this.add(new Label(0, 100, 480, 20, "Anmelde-Pubkey: " + (this.keypair != null ? "RSA-2048 " + this.keyDigest : "nicht vorhanden"), true)); + this.keyLabel = this.add(new Label(0, 100, 480, 20, "Anmelde-Pubkey: " + (this.keypair != null ? "RSA-4096 " + this.keyDigest : "nicht vorhanden"), true)); this.encToggle = this.add(new Toggle(0, 250, 480, 24, false, this.server.requiresEncryption(), null, "Nur Verschlüsselte Verbindung akzeptieren")); this.serverKey = this.server.getServerKey(); this.serverDigest = this.serverKey == null ? null : EncryptUtil.getXorSha512Hash(this.serverKey.getEncoded()); - this.idLabel = this.add(new Label(0, 280, 480, 20, "Server-Pubkey: " + (this.serverKey != null ? "RSA-2048 " + this.serverDigest : "nicht vorhanden"), true)); + this.idLabel = this.add(new Label(0, 280, 480, 20, "Server-Pubkey: " + (this.serverKey != null ? "RSA-4096 " + this.serverDigest : "nicht vorhanden"), true)); this.resetButton = this.add(new ActButton(0, 300, 391, 24, new ButtonCallback() { public void use(ActButton elem, PressType action) { if(GuiServer.this.serverKey != null) { diff --git a/client/src/main/java/client/network/ClientLoginHandler.java b/client/src/main/java/client/network/ClientLoginHandler.java index 1912696..9aefdc4 100755 --- a/client/src/main/java/client/network/ClientLoginHandler.java +++ b/client/src/main/java/client/network/ClientLoginHandler.java @@ -86,13 +86,13 @@ public class ClientLoginHandler extends NetHandler implements IClientLoginHandle ClientLoginHandler.this.connection.closeChannel("Verbindung wurde abgebrochen"); } } - }, "Die Identität des Servers ist unbekannt", "Es wurde noch nie mit diesem Server verbunden.\nSoll die Verbindung wirklich fortgesetzt werden?\n\nDie Pubkey-ID des Servers lautet:\nRSA-2048 " + EncryptUtil.getXorSha512Hash(pubkey.getEncoded()) + "\n\nDer öffentliche Schlüssel des Servers lautet:\n" + Base64.getEncoder().encodeToString(pubkey.getEncoded()), "Verbindung herstellen", "Abbrechen und trennen")); + }, "Die Identität des Servers ist unbekannt", "Es wurde noch nie mit diesem Server verbunden.\nSoll die Verbindung wirklich fortgesetzt werden?\n\nDie Pubkey-ID des Servers lautet:\nRSA-4096 " + EncryptUtil.getXorSha512Hash(pubkey.getEncoded()) + "\n\nDer öffentliche Schlüssel des Servers lautet:\n" + Base64.getEncoder().encodeToString(pubkey.getEncoded()), "Verbindung herstellen", "Abbrechen und trennen")); } }); return; } else if(!this.server.getServerKey().equals(pubkey)) { - this.connection.closeChannel("Die Identität des Servers hat sich geändert\n\nDer Server hat einen anderen öffentlichen Schlüssel als vorher bekannt war, dies kann bedeuten dass der Inhaber jetzt einen anderen Schlüssel verwendet oder sich ein anderer Server als dieser ausgibt (\"Man-in-the-middle-attack\").\n\nDie Pubkey-ID des Servers lautet:\nRSA-2048 " + EncryptUtil.getXorSha512Hash(pubkey.getEncoded()) + "\n\nDer öffentliche Schlüssel des Servers lautet:\n" + Base64.getEncoder().encodeToString(pubkey.getEncoded()) + "\n\nDie vertrauenswürdige Pubkey-ID lautet:\nRSA-2048 " + EncryptUtil.getXorSha512Hash(this.server.getServerKey().getEncoded()) + "\n\nDer vertrauenswürdige Schlüssel lautet:\n" + Base64.getEncoder().encodeToString(this.server.getServerKey().getEncoded()) + + this.connection.closeChannel("Die Identität des Servers hat sich geändert\n\nDer Server hat einen anderen öffentlichen Schlüssel als vorher bekannt war, dies kann bedeuten dass der Inhaber jetzt einen anderen Schlüssel verwendet oder sich ein anderer Server als dieser ausgibt (\"Man-in-the-middle-attack\").\n\nDie Pubkey-ID des Servers lautet:\nRSA-4096 " + EncryptUtil.getXorSha512Hash(pubkey.getEncoded()) + "\n\nDer öffentliche Schlüssel des Servers lautet:\n" + Base64.getEncoder().encodeToString(pubkey.getEncoded()) + "\n\nDie vertrauenswürdige Pubkey-ID lautet:\nRSA-4096 " + EncryptUtil.getXorSha512Hash(this.server.getServerKey().getEncoded()) + "\n\nDer vertrauenswürdige Schlüssel lautet:\n" + Base64.getEncoder().encodeToString(this.server.getServerKey().getEncoded()) + "\n\nFalls der Server trotzdem vertrauenswürdig wirkt, kann die Server-Identifizierung im den Einstellungen von '" + this.server.getName() + "' zurückgesetzt werden."); return; } diff --git a/common/src/main/java/common/util/EncryptUtil.java b/common/src/main/java/common/util/EncryptUtil.java index f721ebf..50bd1d7 100644 --- a/common/src/main/java/common/util/EncryptUtil.java +++ b/common/src/main/java/common/util/EncryptUtil.java @@ -44,7 +44,7 @@ public class EncryptUtil { public static KeyPair createKeypair() { try { KeyPairGenerator pairgen = KeyPairGenerator.getInstance("RSA"); - pairgen.initialize(2048); + pairgen.initialize(4096); return pairgen.generateKeyPair(); } catch(NoSuchAlgorithmException e) { @@ -142,7 +142,7 @@ public class EncryptUtil { } public static String getArmoredPubkey(PublicKey pubkey, String cn) { - StringBuilder sb = new StringBuilder("tcr-rsa-2048 "); + StringBuilder sb = new StringBuilder("tcr-rsa-4096 "); sb.append(Base64.getEncoder().encodeToString(pubkey.getEncoded())); sb.append(' ').append(Base64.getEncoder().encodeToString(crc24(pubkey.getEncoded()))); return cn == null || cn.isEmpty() ? sb.toString() : sb.append(' ').append(Util.sanitizeCommonName(cn)).toString(); @@ -152,8 +152,8 @@ public class EncryptUtil { String[] tok = armor.trim().split(" "); if(tok.length != 3 && tok.length != 4) throw new IllegalArgumentException("Key muss aus 3 oder 4 Segmenten bestehen"); - if(!tok[0].equals("tcr-rsa-2048")) - throw new IllegalArgumentException("Algorithmus '" + tok[0] + "' ist nicht unterstützt, es wird derzeit nur tcr-rsa-2048 verwendet"); + if(!tok[0].equals("tcr-rsa-4096")) + throw new IllegalArgumentException("Algorithmus '" + tok[0] + "' ist nicht unterstützt, es wird derzeit nur tcr-rsa-4096 verwendet"); byte[] key; try { key = Base64.getDecoder().decode(tok[1]); diff --git a/common/src/main/java/common/util/Util.java b/common/src/main/java/common/util/Util.java index 47501f7..151ca2a 100644 --- a/common/src/main/java/common/util/Util.java +++ b/common/src/main/java/common/util/Util.java @@ -490,6 +490,6 @@ int utf_len(const char *str) { } public static void throwUnchecked(Throwable t) { - throw (RuntimeException)t; + throw t instanceof RuntimeException ? (RuntimeException)t : new RuntimeException(t); } }