fix exceptions from net handlers, raise rsa key size to 4096

This commit is contained in:
Sen 2025-05-30 19:39:54 +02:00
parent d1a0847303
commit 1b61f085e3
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
4 changed files with 12 additions and 12 deletions

View file

@ -97,7 +97,7 @@ public class GuiServer extends Gui implements FieldCallback {
if(GuiServer.this.keypair == null) { if(GuiServer.this.keypair == null) {
GuiServer.this.keypair = EncryptUtil.createKeypair(); GuiServer.this.keypair = EncryptUtil.createKeypair();
GuiServer.this.keyDigest = EncryptUtil.getXorSha512Hash(GuiServer.this.keypair.getPublic().getEncoded()); 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.keyButton.setText("Schlüsselpaar entfernen");
GuiServer.this.passLabel.setText("Ersatz-Passwort (mind. 8 Zeichen)"); GuiServer.this.passLabel.setText("Ersatz-Passwort (mind. 8 Zeichen)");
GuiServer.this.copyKeyButton.enabled = true; GuiServer.this.copyKeyButton.enabled = true;
@ -124,7 +124,7 @@ public class GuiServer extends Gui implements FieldCallback {
GuiServer.this.encToggle.setValue(reqEnc); GuiServer.this.encToggle.setValue(reqEnc);
GuiServer.this.serverKey = key; GuiServer.this.serverKey = key;
GuiServer.this.serverDigest = sdigest; 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.resetButton.enabled = key != null;
GuiServer.this.copyIdButton.enabled = key != null; GuiServer.this.copyIdButton.enabled = key != null;
GuiServer.this.copyKeyButton.enabled = !confirmed; GuiServer.this.copyKeyButton.enabled = !confirmed;
@ -138,7 +138,7 @@ public class GuiServer extends Gui implements FieldCallback {
else { else {
GuiServer.this.keypair = keys; GuiServer.this.keypair = keys;
GuiServer.this.keyDigest = digest; 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.keyButton.setText("Schlüsselpaar entfernen");
GuiServer.this.passLabel.setText("Ersatz-Passwort (mind. 8 Zeichen)"); GuiServer.this.passLabel.setText("Ersatz-Passwort (mind. 8 Zeichen)");
} }
@ -154,11 +154,11 @@ public class GuiServer extends Gui implements FieldCallback {
} }
}, "Kopieren")); }, "Kopieren"));
this.copyKeyButton.enabled = this.keypair != null; 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.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.serverKey = this.server.getServerKey();
this.serverDigest = this.serverKey == null ? null : EncryptUtil.getXorSha512Hash(this.serverKey.getEncoded()); 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() { this.resetButton = this.add(new ActButton(0, 300, 391, 24, new ButtonCallback() {
public void use(ActButton elem, PressType action) { public void use(ActButton elem, PressType action) {
if(GuiServer.this.serverKey != null) { if(GuiServer.this.serverKey != null) {

View file

@ -86,13 +86,13 @@ public class ClientLoginHandler extends NetHandler implements IClientLoginHandle
ClientLoginHandler.this.connection.closeChannel("Verbindung wurde abgebrochen"); 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; return;
} }
else if(!this.server.getServerKey().equals(pubkey)) { 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."); "\n\nFalls der Server trotzdem vertrauenswürdig wirkt, kann die Server-Identifizierung im den Einstellungen von '" + this.server.getName() + "' zurückgesetzt werden.");
return; return;
} }

View file

@ -44,7 +44,7 @@ public class EncryptUtil {
public static KeyPair createKeypair() { public static KeyPair createKeypair() {
try { try {
KeyPairGenerator pairgen = KeyPairGenerator.getInstance("RSA"); KeyPairGenerator pairgen = KeyPairGenerator.getInstance("RSA");
pairgen.initialize(2048); pairgen.initialize(4096);
return pairgen.generateKeyPair(); return pairgen.generateKeyPair();
} }
catch(NoSuchAlgorithmException e) { catch(NoSuchAlgorithmException e) {
@ -142,7 +142,7 @@ public class EncryptUtil {
} }
public static String getArmoredPubkey(PublicKey pubkey, String cn) { 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(Base64.getEncoder().encodeToString(pubkey.getEncoded()));
sb.append(' ').append(Base64.getEncoder().encodeToString(crc24(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(); 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(" "); String[] tok = armor.trim().split(" ");
if(tok.length != 3 && tok.length != 4) if(tok.length != 3 && tok.length != 4)
throw new IllegalArgumentException("Key muss aus 3 oder 4 Segmenten bestehen"); throw new IllegalArgumentException("Key muss aus 3 oder 4 Segmenten bestehen");
if(!tok[0].equals("tcr-rsa-2048")) if(!tok[0].equals("tcr-rsa-4096"))
throw new IllegalArgumentException("Algorithmus '" + tok[0] + "' ist nicht unterstützt, es wird derzeit nur tcr-rsa-2048 verwendet"); throw new IllegalArgumentException("Algorithmus '" + tok[0] + "' ist nicht unterstützt, es wird derzeit nur tcr-rsa-4096 verwendet");
byte[] key; byte[] key;
try { try {
key = Base64.getDecoder().decode(tok[1]); key = Base64.getDecoder().decode(tok[1]);

View file

@ -490,6 +490,6 @@ int utf_len(const char *str) {
} }
public static void throwUnchecked(Throwable t) { public static void throwUnchecked(Throwable t) {
throw (RuntimeException)t; throw t instanceof RuntimeException ? (RuntimeException)t : new RuntimeException(t);
} }
} }