مقاله ای در مورد چگونگی استفاده از 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)؛
}
}
}
من سؤالات زیر را دارم:
- در Konscious.Securance.Cryptography صفحه خواندن ، به جای
argon2id.GetBytes (16)، آنها ازargon2 استفاده می کنند .GetBytes (128)که مقدار بیشتری را بازمی گرداند.
با فرض اینکه پیکربندی ها یکسان هستند ، آیا رویکرد 128 امن تر از 16 است زیرا طولانی تر است؟
- از آنچه می فهمم ، هر چه بیشتر از حافظه استفاده کنیم ، Argon2id از آن استفاده می کند ، در برابر حملات سخت افزاری سفارشی ، ایمن تر خواهد بود.
بنابراین من فرض می کنم که حتی اگر 40 با 70 مگابایت و 4 تکرار با 600 MB تقریباً در همان زمان ، تقریباً همان حافظه پیکربندی دوم توجیه می شود زیرا امنیت بیشتری دارد. آیا این صحیح است؟