]> git.basschouten.com Git - openhab-addons.git/commitdiff
Use SecureRandom instead of Random (#15459)
authorHolger Friedrich <holgerfriedrich@users.noreply.github.com>
Sun, 20 Aug 2023 19:29:37 +0000 (21:29 +0200)
committerGitHub <noreply@github.com>
Sun, 20 Aug 2023 19:29:37 +0000 (21:29 +0200)
Make sure that SecureRadom is used whenever the random number
is used for cryptographic operations, e.g. as nonce/salt.

Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/MyNettyAuthHandler.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java
bundles/org.openhab.binding.kostalinverter/src/main/java/org/openhab/binding/kostalinverter/internal/thirdgeneration/ThirdGenerationEncryptionHelper.java
bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/CloudUtil.java
bundles/org.openhab.binding.millheat/src/main/java/org/openhab/binding/millheat/internal/handler/MillheatAccountHandler.java
bundles/org.openhab.binding.mybmw/src/main/java/org/openhab/binding/mybmw/internal/utils/Converter.java
bundles/org.openhab.binding.satel/src/main/java/org/openhab/binding/satel/internal/protocol/Ethm1Module.java

index 7630e5263fa4c033d422c772c0ebc0757a39a297..1fa75c9ee6b894762fed16e93462b825e053eff9 100644 (file)
@@ -14,6 +14,7 @@ package org.openhab.binding.ipcamera.internal;
 
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
 import java.util.Random;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -117,7 +118,7 @@ public class MyNettyAuthHandler extends ChannelDuplexHandler {
         // create the MD5 hashes
         String ha1 = username + ":" + realm + ":" + password;
         ha1 = calcMD5Hash(ha1);
-        Random random = new Random();
+        Random random = new SecureRandom();
         String cnonce = Integer.toHexString(random.nextInt());
         ncCounter = (ncCounter > 125) ? 1 : ++ncCounter;
         String nc = String.format("%08X", ncCounter); // 8 digit hex number
index fbf47b8263b901c0b260ce42d3d7ecefd57e1c07..94885257152eba2a52e06c5a1b416e748c380fed 100644 (file)
@@ -18,6 +18,7 @@ import java.net.InetSocketAddress;
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Base64;
@@ -478,7 +479,7 @@ public class OnvifConnection {
     }
 
     String createNonce() {
-        Random nonce = new Random();
+        Random nonce = new SecureRandom();
         return "" + nonce.nextInt();
     }
 
index 1b4d5422628c6b34f1d456dc9b2d53f2fffb98da..2cd93d539cb9e2bf23a3ef1a28f2e29b96517f4c 100644 (file)
@@ -17,6 +17,7 @@ import static org.openhab.binding.kostalinverter.internal.thirdgeneration.ThirdG
 import java.security.InvalidKeyException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
 import java.security.spec.InvalidKeySpecException;
 import java.util.Base64;
 import java.util.Random;
@@ -105,7 +106,7 @@ final class ThirdGenerationEncryptionHelper {
      * @return nonce
      */
     static String createClientNonce() {
-        Random generator = new Random();
+        Random generator = new SecureRandom();
 
         // Randomize the random generator
         byte[] randomizeArray = new byte[1024];
index 840b0f758e122ce6772165f308271b5695a75f8e..491b0dda2aa67917fa66952af931557bb0f19332 100644 (file)
@@ -24,6 +24,7 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.security.SecureRandom;
 import java.util.ArrayList;
 import java.util.Base64;
 import java.util.List;
@@ -45,7 +46,7 @@ import org.slf4j.Logger;
 @NonNullByDefault
 public class CloudUtil {
 
-    private static final Random RANDOM = new Random();
+    private static final Random RANDOM = new SecureRandom();
 
     /**
      * Saves the Xiaomi cloud device info with tokens to file
index 0b5165f0e5e2ca2153bf7103528f91959325713e..176608f01749aa563003f958bad7de2f4526f8ff 100644 (file)
@@ -15,6 +15,7 @@ package org.openhab.binding.millheat.internal.handler;
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
 import java.util.List;
 import java.util.Optional;
 import java.util.Random;
@@ -107,7 +108,7 @@ public class MillheatAccountHandler extends BaseBridgeHandler {
     private @NonNullByDefault({}) MillheatAccountConfiguration config;
 
     private static String getRandomString(final int sizeOfRandomString) {
-        final Random random = new Random();
+        final Random random = new SecureRandom();
         final StringBuilder sb = new StringBuilder(sizeOfRandomString);
         for (int i = 0; i < sizeOfRandomString; ++i) {
             sb.append(ALLOWED_NONCE_CHARACTERS.charAt(random.nextInt(ALLOWED_NONCE_CHARACTERS_LENGTH)));
index 8bcd38356bae03ab4c3b8ec0ff135b9fd416c927..d94e6a87275bf32e1283097b4a7b55e25a049c76 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.mybmw.internal.utils;
 
 import java.lang.reflect.Type;
+import java.security.SecureRandom;
 import java.text.SimpleDateFormat;
 import java.time.LocalTime;
 import java.time.ZoneId;
@@ -251,7 +252,7 @@ public class Converter {
     public static String getRandomString(int size) {
         int leftLimit = 97; // letter 'a'
         int rightLimit = 122; // letter 'z'
-        Random random = new Random();
+        Random random = new SecureRandom();
 
         String generatedString = random.ints(leftLimit, rightLimit + 1).limit(size)
                 .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString();
index 52a8f2dda3b93ea4ab83f3a610373ad586df0d47..57f26f0507816f07adf1bc30c91dbff06a539fe9 100644 (file)
@@ -20,6 +20,7 @@ import java.io.OutputStream;
 import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.net.SocketTimeoutException;
+import java.security.SecureRandom;
 import java.util.Random;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -132,7 +133,7 @@ public class Ethm1Module extends SatelModule {
             } catch (Exception e) {
                 throw new IOException("General encryption failure", e);
             }
-            this.rand = new Random();
+            this.rand = new SecureRandom();
             this.idS = 0;
             this.idR = 0;
             this.rollingCounter = 0;