مقاله ای در مورد چگونگی استفاده از Argon2id در C # را در اینجا در اینجا خواندم.

در زیر کدی که آنها نوشتند (اندکی ویرایش شده است):
با استفاده از System.Diagnostics؛
با استفاده از System.Linq؛
با استفاده از System.Securance.Cryptography؛
با استفاده از System.Text؛
با استفاده از Konscious.Securance.Cryptography؛

فضای نام
{
    برنامه کلاس
    {
        // تعداد هسته های CPU x 2.
        const int DEGREE_OF_PARALLELISM = 16؛

        // مقدار حداقل توصیه شده
        کنفرانس خصوصی NUMBER_OF_ITERATIONS = 4؛

        // 600 مگابایت.
        const int MEMORY_TO_USE_IN_KB = 600000؛

        اصلی خالی استاتیک اصلی (رشته [])
        {
            var password = "SomeSecurePassword"؛
            بایت [] نمک = CreatSalt ()؛
            بایت [] hash = HashPassword (رمز عبور ، نمک)؛

            var otherPassword = "SomeSecurePassword"؛
            var sukses = VerifyHash (کلمه کلیدی دیگر ، نمک ، هش)؛
            Console.WriteLine (موفقیت؟ "گذرواژه‌ها مطابقت دارند!": "گذرواژه‌ها مطابقت ندارند.")؛
        }

        بایت استاتیک خصوصی [] CreatSalt ()
        {
            var buffer = بایت جدید [16]؛
            var rng = RNGCryptoServiceProvider ()؛
            rng.GetBytes (بافر)؛

            بازگشت بافر؛
        }

        بایت استاتیک خصوصی [] HashPassword (رمز رشته ای ، بایت [] نمک)
        {
            var argon2id = Argon2id جدید (رمزگذاری.UTF8.GetBytes (رمز عبور))؛
            argon2id.Salt = نمک؛
            argon2id.DegreeOfParallelism = DEGREE_OF_PARALLELISM؛
            argon2id.Iterations = NUMBER_OF_ITERATIONS؛
            argon2id.MemorySize = MEMORY_TO_USE_IN_KB؛

            argon2id.GetBytes (16)؛
        }

        بوت استاتیک خصوصی VerifyHash (رمز رشته ، بایت [] نمک ، بایت [] هش)
        {
            var newHash = HashPassword (رمز عبور ، نمک)؛
            بازگشت hash.SequenceEqual (newHash)؛
        }
    }
}

من سؤالات زیر را دارم:

  1. در Konscious.Securance.Cryptography صفحه خواندن ، به جای argon2id.GetBytes (16) ، آنها از argon2 استفاده می کنند .GetBytes (128) که مقدار بیشتری را بازمی گرداند.

با فرض اینکه پیکربندی ها یکسان هستند ، آیا رویکرد 128 امن تر از 16 است زیرا طولانی تر است؟

  1. از آنچه می فهمم ، هر چه بیشتر از حافظه استفاده کنیم ، Argon2id از آن استفاده می کند ، در برابر حملات سخت افزاری سفارشی ، ایمن تر خواهد بود.

بنابراین من فرض می کنم که حتی اگر 40 با 70 مگابایت و 4 تکرار با 600 MB تقریباً در همان زمان ، تقریباً همان حافظه پیکربندی دوم توجیه می شود زیرا امنیت بیشتری دارد. آیا این صحیح است؟