From 39707fda6289740729bef8cb214a2bf3f555b86e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 7 Aug 2016 16:25:12 -0400 Subject: finish AES decryption puzzle implementation --- Tunables.hs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'Tunables.hs') diff --git a/Tunables.hs b/Tunables.hs index f5832b4..79fb2a8 100644 --- a/Tunables.hs +++ b/Tunables.hs @@ -5,16 +5,19 @@ import Cost import qualified Crypto.Argon2 as Argon2 data Tunables = Tunables - { argonOptions :: Argon2.HashOptions + { objectSize :: Int + -- ^ size of objects stored in keysafe, in bytes + , argonOptions :: Argon2.HashOptions , argonCost :: Cost CreationOp -- ^ should correspond to the argonOptions - , decryptionCost :: Cost DecryptionOp - -- ^ controls the decryption cost + , decryptionPuzzleCost :: Cost DecryptionOp + -- ^ cost of decryption puzzle } defaultTunables :: Tunables defaultTunables = Tunables - { argonOptions = Argon2.HashOptions + { objectSize = 1024*64 -- 64 kb + , argonOptions = Argon2.HashOptions { Argon2.hashIterations = 10000 , Argon2.hashMemory = 131072 -- 128 mebibtyes per thread , Argon2.hashParallelism = 4 -- 4 threads @@ -30,13 +33,14 @@ defaultTunables = Tunables -- This is set to only 1 minute because GPUs are quite a lot -- faster than CPUs at AES, and so setting it higher would make -- clients too slow at key recovery. - , decryptionCost = GPUCost (Seconds 60) + , decryptionPuzzleCost = GPUCost (Seconds 60) } -- | Dials back cryptographic difficulty, not for production use. testModeTunables :: Tunables testModeTunables = Tunables - { argonOptions = Argon2.defaultHashOptions - , argonCost = CPUCost (Seconds 0) - , decryptionCost = GPUCost (Seconds 0) + { objectSize = 1024*64 + , argonOptions = Argon2.defaultHashOptions + , argonCost = CPUCost (Seconds (2*600)) + , decryptionPuzzleCost = GPUCost (Seconds 60) } -- cgit v1.2.3