From 9613019d4dda9d52973c540b3a6c44097bcf02b1 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Fri, 20 Jan 2023 22:03:16 +0100 Subject: [PATCH] [PS-2249] Implement Argon2 (#2293) * Implement Argon2 * Fix incorrect argon2 type on iOS * Switch argon2 implementation to native bindings * Change argon2 to save iterations instead of memory as 'kdfIterations' * Remove mistakenly added import * Remove unused library --- .gitignore | 1 + src/Android/Android.csproj | 4 ++++ .../Services/CryptoPrimitiveService.cs | 12 ++++++++++ src/Android/lib/arm64-v8a/libargon2.so | Bin 0 -> 38760 bytes src/Android/lib/armeabi-v7a/libargon2.so | Bin 0 -> 38568 bytes src/Android/lib/x86/libargon2.so | Bin 0 -> 46700 bytes src/Android/lib/x86_64/libargon2.so | Bin 0 -> 47224 bytes .../Abstractions/ICryptoFunctionService.cs | 4 ++++ .../Abstractions/ICryptoPrimitiveService.cs | 1 + src/Core/Enums/KdfType.cs | 3 ++- src/Core/Services/CryptoService.cs | 8 +++++++ src/Core/Services/PclCryptoFunctionService.cs | 22 ++++++++++++++++++ 12 files changed, 54 insertions(+), 1 deletion(-) create mode 100755 src/Android/lib/arm64-v8a/libargon2.so create mode 100755 src/Android/lib/armeabi-v7a/libargon2.so create mode 100755 src/Android/lib/x86/libargon2.so create mode 100755 src/Android/lib/x86_64/libargon2.so diff --git a/.gitignore b/.gitignore index 107fad1df..a006ce4bf 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ Components/ [Rr]eleases/ x64/ x86/ +!src/lib/x86/ build/ bld/ [Bb]in/ diff --git a/src/Android/Android.csproj b/src/Android/Android.csproj index 8d01e1091..c285cad13 100644 --- a/src/Android/Android.csproj +++ b/src/Android/Android.csproj @@ -169,6 +169,10 @@ + + + + diff --git a/src/Android/Services/CryptoPrimitiveService.cs b/src/Android/Services/CryptoPrimitiveService.cs index bdb19cfa5..6ea22224a 100644 --- a/src/Android/Services/CryptoPrimitiveService.cs +++ b/src/Android/Services/CryptoPrimitiveService.cs @@ -5,6 +5,8 @@ using Org.BouncyCastle.Crypto.Digests; using Org.BouncyCastle.Crypto.Generators; using Org.BouncyCastle.Crypto.Parameters; using System; +using System.Runtime.InteropServices; +using Java.Lang; namespace Bit.Droid.Services { @@ -33,5 +35,15 @@ namespace Bit.Droid.Services generator.Init(password, salt, iterations); return ((KeyParameter)generator.GenerateDerivedMacParameters(keySize)).GetKey(); } + public byte[] Argon2id(byte[] password, byte[] salt, int iterations, int memory, int parallelism) + { + JavaSystem.LoadLibrary("argon2"); + var hash = new byte[32]; + argon2id_hash_raw(iterations, memory, parallelism, password, password.Length, password, salt.Length, hash, 32); + return hash.ToArray(); + } + + [DllImport("argon2", EntryPoint = "argon2id_hash_raw")] + internal static extern int argon2id_hash_raw(int timeCost, int memoryCost, int parallelism, byte[] pwd, int pwdlen, byte[] salt, int saltlen, ref byte hash, int hashlen); } } diff --git a/src/Android/lib/arm64-v8a/libargon2.so b/src/Android/lib/arm64-v8a/libargon2.so new file mode 100755 index 0000000000000000000000000000000000000000..da072ae3c0bd4504fea30f7909c0deaac34f86fb GIT binary patch literal 38760 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 literal 0 HcmV?d00001 diff --git a/src/Android/lib/armeabi-v7a/libargon2.so b/src/Android/lib/armeabi-v7a/libargon2.so new file mode 100755 index 0000000000000000000000000000000000000000..ebb445931d255f9956d1af26481b1db3a92ab01b GIT binary patch literal 38568 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 z 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 literal 0 HcmV?d00001 diff --git a/src/Android/lib/x86/libargon2.so b/src/Android/lib/x86/libargon2.so new file mode 100755 index 0000000000000000000000000000000000000000..01c269702b3b60850b0dd35382e9d29d19dde511 GIT binary patch literal 46700 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 IdQAU+03VoKVE_OC literal 0 HcmV?d00001 diff --git a/src/Android/lib/x86_64/libargon2.so b/src/Android/lib/x86_64/libargon2.so new file mode 100755 index 0000000000000000000000000000000000000000..8e379f601298c6b690136aef43dec0cf452c5413 GIT binary patch literal 47224 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 IG6}W(Z!rrzrvLx| literal 0 HcmV?d00001 diff --git a/src/Core/Abstractions/ICryptoFunctionService.cs b/src/Core/Abstractions/ICryptoFunctionService.cs index 14f8fdf6c..39b6ba6a1 100644 --- a/src/Core/Abstractions/ICryptoFunctionService.cs +++ b/src/Core/Abstractions/ICryptoFunctionService.cs @@ -10,6 +10,10 @@ namespace Bit.Core.Abstractions Task Pbkdf2Async(byte[] password, string salt, CryptoHashAlgorithm algorithm, int iterations); Task Pbkdf2Async(string password, byte[] salt, CryptoHashAlgorithm algorithm, int iterations); Task Pbkdf2Async(byte[] password, byte[] salt, CryptoHashAlgorithm algorithm, int iterations); + Task Argon2Async(string password, string salt, int iterations, int memory, int parallelism); + Task Argon2Async(byte[] password, string salt, int iterations, int memory, int parallelism); + Task Argon2Async(string password, byte[] salt, int iterations, int memory, int parallelism); + Task Argon2Async(byte[] password, byte[] salt, int iterations, int memory, int parallelism); Task HkdfAsync(byte[] ikm, string salt, string info, int outputByteSize, HkdfAlgorithm algorithm); Task HkdfAsync(byte[] ikm, byte[] salt, string info, int outputByteSize, HkdfAlgorithm algorithm); Task HkdfAsync(byte[] ikm, string salt, byte[] info, int outputByteSize, HkdfAlgorithm algorithm); diff --git a/src/Core/Abstractions/ICryptoPrimitiveService.cs b/src/Core/Abstractions/ICryptoPrimitiveService.cs index 897c337c4..cf29f01de 100644 --- a/src/Core/Abstractions/ICryptoPrimitiveService.cs +++ b/src/Core/Abstractions/ICryptoPrimitiveService.cs @@ -5,5 +5,6 @@ namespace Bit.Core.Abstractions public interface ICryptoPrimitiveService { byte[] Pbkdf2(byte[] password, byte[] salt, CryptoHashAlgorithm algorithm, int iterations); + byte[] Argon2id(byte[] password, byte[] salt, int iterations, int memory, int parallelism); } } diff --git a/src/Core/Enums/KdfType.cs b/src/Core/Enums/KdfType.cs index 1c845846a..86cdf849c 100644 --- a/src/Core/Enums/KdfType.cs +++ b/src/Core/Enums/KdfType.cs @@ -2,6 +2,7 @@ { public enum KdfType : byte { - PBKDF2_SHA256 = 0 + PBKDF2_SHA256 = 0, + Argon2id = 1, } } diff --git a/src/Core/Services/CryptoService.cs b/src/Core/Services/CryptoService.cs index 96977ca5a..433424ed8 100644 --- a/src/Core/Services/CryptoService.cs +++ b/src/Core/Services/CryptoService.cs @@ -406,6 +406,14 @@ namespace Bit.Core.Services key = await _cryptoFunctionService.Pbkdf2Async(password, salt, CryptoHashAlgorithm.Sha256, kdfIterations.Value); } + else if (kdf == KdfType.Argon2id) + { + var iterations = kdfIterations.Value; + const int parallelism = 1; + const int memory = 1024 * 16; // 16 MiB + + key = await _cryptoFunctionService.Argon2Async(password, salt, iterations, memory, parallelism); + } else { throw new Exception("Unknown kdf."); diff --git a/src/Core/Services/PclCryptoFunctionService.cs b/src/Core/Services/PclCryptoFunctionService.cs index fa8e8693d..50c555065 100644 --- a/src/Core/Services/PclCryptoFunctionService.cs +++ b/src/Core/Services/PclCryptoFunctionService.cs @@ -44,6 +44,28 @@ namespace Bit.Core.Services return Task.FromResult(_cryptoPrimitiveService.Pbkdf2(password, salt, algorithm, iterations)); } + public Task Argon2Async(string password, string salt, int iterations, int memory, int parallelism) + { + password = NormalizePassword(password); + return Argon2Async(Encoding.UTF8.GetBytes(password), Encoding.UTF8.GetBytes(salt), iterations, memory, parallelism); + } + + public Task Argon2Async(byte[] password, string salt, int iterations, int memory, int parallelism) + { + return Argon2Async(password, Encoding.UTF8.GetBytes(salt), iterations, memory, parallelism); + } + + public Task Argon2Async(string password, byte[] salt, int iterations, int memory, int parallelism) + { + password = NormalizePassword(password); + return Argon2Async(Encoding.UTF8.GetBytes(password), salt, iterations, memory, parallelism); + } + + public Task Argon2Async(byte[] password, byte[] salt, int iterations, int memory, int parallelism) + { + return Task.FromResult(_cryptoPrimitiveService.Argon2id(password, salt, iterations, memory, parallelism)); + } + public async Task HkdfAsync(byte[] ikm, string salt, string info, int outputByteSize, HkdfAlgorithm algorithm) => await HkdfAsync(ikm, Encoding.UTF8.GetBytes(salt), Encoding.UTF8.GetBytes(info), outputByteSize, algorithm);