diff options
| author | 2018-01-22 21:47:38 +0000 | |
|---|---|---|
| committer | 2018-01-22 21:47:38 +0000 | |
| commit | b7f09acde2f85a0e7e198d81a0e98ea6033c1109 (patch) | |
| tree | 426a1618a7b4e09b804f62726a46f93713cd98c0 | |
| parent | 971270335ac2a68132bc60262c347b1284c00f38 (diff) | |
| parent | 875374a4948d70c2a2379c88d1242082f298f349 (diff) | |
Merge "Use encoder id as insecure DP encoder random seed"
4 files changed, 12 insertions, 13 deletions
diff --git a/core/java/android/privacy/internal/rappor/RapporEncoder.java b/core/java/android/privacy/internal/rappor/RapporEncoder.java index 2eca4c98d235..9ac2b3e1136e 100644 --- a/core/java/android/privacy/internal/rappor/RapporEncoder.java +++ b/core/java/android/privacy/internal/rappor/RapporEncoder.java @@ -33,7 +33,6 @@ import java.util.Random; public class RapporEncoder implements DifferentialPrivacyEncoder { // Hard-coded seed and secret for insecure encoder - private static final long INSECURE_RANDOM_SEED = 0x12345678L; private static final byte[] INSECURE_SECRET = new byte[]{ (byte) 0xD7, (byte) 0x68, (byte) 0x99, (byte) 0x93, (byte) 0x94, (byte) 0x13, (byte) 0x53, (byte) 0x54, @@ -66,8 +65,8 @@ public class RapporEncoder implements DifferentialPrivacyEncoder { // Use SecureRandom as random generator. random = sSecureRandom; } else { - // Hard-coded random generator, to have deterministic result. - random = new Random(INSECURE_RANDOM_SEED); + // To have deterministic result by hard coding encoder id as seed. + random = new Random((long) config.mEncoderId.hashCode()); userSecret = INSECURE_SECRET; } mEncoder = new Encoder(random, null, null, diff --git a/core/tests/privacytests/src/android/privacy/LongitudinalReportingEncoderTest.java b/core/tests/privacytests/src/android/privacy/LongitudinalReportingEncoderTest.java index 91664381efe0..6fe19a263e8b 100644 --- a/core/tests/privacytests/src/android/privacy/LongitudinalReportingEncoderTest.java +++ b/core/tests/privacytests/src/android/privacy/LongitudinalReportingEncoderTest.java @@ -72,13 +72,13 @@ public class LongitudinalReportingEncoderTest { final LongitudinalReportingEncoder encoder = LongitudinalReportingEncoder.createInsecureEncoderForTest( config); - assertEquals(1, encoder.encodeBoolean(true)[0]); + assertEquals(0, encoder.encodeBoolean(true)[0]); assertEquals(0, encoder.encodeBoolean(true)[0]); assertEquals(1, encoder.encodeBoolean(true)[0]); + assertEquals(0, encoder.encodeBoolean(true)[0]); assertEquals(1, encoder.encodeBoolean(true)[0]); assertEquals(1, encoder.encodeBoolean(true)[0]); assertEquals(1, encoder.encodeBoolean(true)[0]); - assertEquals(0, encoder.encodeBoolean(true)[0]); assertEquals(1, encoder.encodeBoolean(true)[0]); assertEquals(1, encoder.encodeBoolean(true)[0]); assertEquals(1, encoder.encodeBoolean(true)[0]); @@ -86,12 +86,12 @@ public class LongitudinalReportingEncoderTest { assertEquals(0, encoder.encodeBoolean(false)[0]); assertEquals(1, encoder.encodeBoolean(false)[0]); assertEquals(1, encoder.encodeBoolean(false)[0]); - assertEquals(0, encoder.encodeBoolean(false)[0]); + assertEquals(1, encoder.encodeBoolean(false)[0]); assertEquals(0, encoder.encodeBoolean(false)[0]); assertEquals(0, encoder.encodeBoolean(false)[0]); assertEquals(1, encoder.encodeBoolean(false)[0]); assertEquals(0, encoder.encodeBoolean(false)[0]); - assertEquals(0, encoder.encodeBoolean(false)[0]); + assertEquals(1, encoder.encodeBoolean(false)[0]); assertEquals(1, encoder.encodeBoolean(false)[0]); // Test if IRR returns original result when f = 0 diff --git a/core/tests/privacytests/src/android/privacy/RapporEncoderTest.java b/core/tests/privacytests/src/android/privacy/RapporEncoderTest.java index dad98b8e4a35..fa0343df88b4 100644 --- a/core/tests/privacytests/src/android/privacy/RapporEncoderTest.java +++ b/core/tests/privacytests/src/android/privacy/RapporEncoderTest.java @@ -80,7 +80,7 @@ public class RapporEncoderTest { int numBits = 8; final long inputValue = 254L; final long prrValue = 250L; - final long prrAndIrrValue = 184L; + final long prrAndIrrValue = 244L; final RapporConfig config1 = new RapporConfig( "Foo", // encoderId diff --git a/services/tests/servicestests/src/com/android/server/net/watchlist/PrivacyUtilsTests.java b/services/tests/servicestests/src/com/android/server/net/watchlist/PrivacyUtilsTests.java index a31b46ce5534..999dce51bd9c 100644 --- a/services/tests/servicestests/src/com/android/server/net/watchlist/PrivacyUtilsTests.java +++ b/services/tests/servicestests/src/com/android/server/net/watchlist/PrivacyUtilsTests.java @@ -77,9 +77,9 @@ public class PrivacyUtilsTests { assertEquals(6, result.size()); assertTrue(result.get("C86F9D37425340B635F43D6BC2506630761ADA71F5E6BBDBCA4651C479F9FB48")); assertTrue(result.get("C86F9D37425340B635F43D6BC2506630761ADA71F5E6BBDBCA4651C479F9FB49")); - assertFalse(result.get("C86F9D37425340B635F43D6BC2506630761ADA71F5E6BBDBCA4651C479F9FB47")); - assertTrue(result.get("E86F9D37425340B635F43D6BC2506630761ADA71F5E6BBDBCA4651C479F9FB45")); - assertFalse(result.get("C86F9D37425340B635F43D6BC2506630761ADA71F5E6BBDBCA4651C479F9FB44")); + assertTrue(result.get("C86F9D37425340B635F43D6BC2506630761ADA71F5E6BBDBCA4651C479F9FB47")); + assertFalse(result.get("E86F9D37425340B635F43D6BC2506630761ADA71F5E6BBDBCA4651C479F9FB45")); + assertTrue(result.get("C86F9D37425340B635F43D6BC2506630761ADA71F5E6BBDBCA4651C479F9FB44")); assertTrue(result.get("B86F9D37425340B635F43D6BC2506630761ADA71F5E6BBDBCA4651C479F9FB43")); } @@ -87,7 +87,7 @@ public class PrivacyUtilsTests { public void testPrivacyUtils_createInsecureDPEncoderForTest() throws Exception { DifferentialPrivacyEncoder encoder = PrivacyUtils.createInsecureDPEncoderForTest("foo"); assertEquals( - "EncoderId: watchlist_encoder:foo, ProbabilityF: 0.400, ProbabilityP: 0.250, " + "EncoderId: watchlist_encoder:foo, ProbabilityF: 0.469, ProbabilityP: 0.280, " + "ProbabilityQ: 1.000", encoder.getConfig().toString()); assertTrue(encoder.isInsecureEncoderForTest()); @@ -97,7 +97,7 @@ public class PrivacyUtilsTests { public void testPrivacyUtils_createSecureDPEncoderTest() throws Exception { DifferentialPrivacyEncoder encoder = PrivacyUtils.createSecureDPEncoder(TEST_SECRET, "foo"); assertEquals( - "EncoderId: watchlist_encoder:foo, ProbabilityF: 0.400, ProbabilityP: 0.250, " + "EncoderId: watchlist_encoder:foo, ProbabilityF: 0.469, ProbabilityP: 0.280, " + "ProbabilityQ: 1.000", encoder.getConfig().toString()); assertFalse(encoder.isInsecureEncoderForTest()); |