Argon2, Temmuz 2015'te Parola Özetleme Yarışmasının galibi olarak seçilen anahtar türetme fonksiyonudur. Lüksemburg Üniversitesi'nden Alex Biryukov, Daniel Dinu ve Dmitry Khovratovich tarafından tasarlanmıştır. Argon2'nin referans uygulaması, CC0 lisansı (yani kamu malı) veya Apache License 2.0 altında yayınlanmış ve üç ilgili sürüm sağlamıştır:
- Argon2d, GPU kırılma saldırılarına karşı direnci en üst düzeye çıkarır. Argon2d, bellek dizisine, parola bağımlı bir sırayla erişir; bu da zaman-bellek takası (TMTO) saldırılarının olasılığını azaltır, ancak olası yan kanal saldırıları sunar.
- Argon2i, yan kanal saldırılarına dayanacak şekilde optimize edilmiştir. Bellek dizisine parola bağımsız bir sırada erişir.
- Argon2id hibrit bir versiyondur. İlk bellek geçişi için Argon2i yaklaşımını ve sonraki geçişler için Argon2d yaklaşımını izler. İnternet taslağı, diğer iki moddan birinin tercih edilmesini gerektiren durumlar olması haricinde Argon2id kullanılmasını önerir.
Üç modun her biri, aşağıda verilen üç parametre ile tanımlama yapmaya izin verir.
- çalışma süresi
- hafıza gerekliliği
- paralellik derecesi
Kriptanaliz
Argon2d'ye uygulanabilecek genel bir kripto analizi olmamasına rağmen, Argon2i fonksiyonuna karşı yayınlanan iki saldırı vardır. İlk saldırı sadece Argon2i'nin eski sürümüne uygulanabilirken, ikincisi en son sürüme kadar uzatılmıştır (1.3)
İlk saldırı, zaman cezası olmadan, istenen alanın çeyreği ile beşte biri arasında kullanılması ile, tek geçişli Argon2i fonksiyonunu hesaplamanın ve yine zaman cezası olmadan, sadece N/e < N/2.71 alanı kullanarak birçok geçişli Argon2i hesaplamanın mümkün olduğunu göstermektedir. Argon2 yazarlarına göre, bu saldırı vektörü 1.3 sürümünde düzeltilmiştir.
İkinci saldırı, Argon2i'nin, seçilen tüm parametreler için, örneğin; σ(alan maliyeti), τ(zaman maliyeti) ve n=σ∗τ olan izlek sayısı, karmaşıklığı O(n7/4 log(n)) olan bir algoritma ile hesaplanabildiğini göstermektedir.
Argon2 yazarları, Argon2i üç veya daha fazla geçişle kullanılırsa bu saldırının etkili olmadığını iddia eder. Bununla birlikte, Joël Alwen ve Jeremiah Blocki saldırıyı iyileştirmiş ve saldırının başarısız olması için Argon2i 1.3'ün bellek üzerinde 10'dan fazla geçişe ihtiyaç duyduğunu göstermiştir.
Algoritma
Function Argon2 Inputs: password (P): Bytes (0..232-1) Password (or message) to be hashed salt (S): Bytes (8..232-1) Salt (16 bytes recommended for password hashing) parallelism (p): Number (1..224-1) Degree of parallelism (i.e. number of threads) tagLength (T): Number (4..232-1) Desired number of returned bytes memorySizeKB (m): Number (8p..232-1) Amount of memory (in [./https://en.wikipedia.org/wiki/Kibibyte 30 Mart 2019 tarihinde Wayback Machine sitesinde arşivlendi. kibibytes]) to use iterations (t): Number (1..232-1) Number of iterations to perform version (v): Number (0x13) The current version is 0x13 (19 decimal) key (K): Bytes (0..232-1) Optional key (Errata: PDF says 0..32 bytes, RFC says 0..232 bytes) associatedData (X): Bytes (0..232-1) Optional arbitrary extra data hashType (y): Number (0=Argon2d, 1=Argon2i, 2=Argon2id) Output: tag: Bytes (tagLength) The resulting generated bytes, tagLength bytes long Generate initial 64-byte block H0. All the input parameters are concatenated and input as a source of additional entropy. Errata: RFC says H0 is 64-bits; PDF says H0 is 64-bytes. Errata: RFC says the Hash is H^, the PDF says it's ℋ (but doesn't document what ℋ is). It's actually Blake2b. Variable length items are prepended with their length as 32-bit little-endian integers. buffer ← parallelism ∥ tagLength ∥ memorySizeKB ∥ iterations ∥ version ∥ hashType ∥ Length(password) ∥ Password ∥ Length(salt) ∥ salt ∥ Length(key) ∥ key ∥ Length(associatedData) ∥ associatedData H0 ← Blake2b(buffer, 64) //default hash size of Blake2b is 64-bytes Calculate number of 1 KB blocks by rounding down memorySizeKB to the nearest multiple of 4*parallelism [./https://en.wikipedia.org/wiki/Kibibyte 30 Mart 2019 tarihinde Wayback Machine sitesinde arşivlendi. kibibytes] blockCount ← Floor(memorySizeKB, 4*parallelism) Allocate two-dimensional array of 1 KiB blocks (parallelism rows x columnCount columns) columnCount ← blockCount / parallelism; //In the RFC, columnCount is referred to as q Compute the first and second block (i.e. column zero and one) of each lane (i.e. row) for i ← 0 to parallelism-1 do for each row Bi[0] ← Hash(H0 ∥ 0 ∥ i, 1024) //Generate a 1024-byte digest Bi[1] ← Hash(H0 ∥ 1 ∥ i, 1024) //Generate a 1024-byte digest Compute remaining columns of each lane for i ← 0 to parallelism-1 do //for each row for j ← 2 to columnCount-1 do //for each subsequent column //i' and j' indexes depend if it's Argon2i, Argon2d, or Argon2id (See section 3.4) i′, j′ ← GetBlockIndexes(i, j) //the GetBlockIndexes function is not defined Bi[j] = G(Bi[j-1], Bi′[j′]) //the G hash function is not defined Further passes when iterations > 1 for nIteration ← 2 to iterations do for i ← 0 to parallelism-1 do for each row for j ← 0 to columnCount-1 do //for each subsequent column //i' and j' indexes depend if it's Argon2i, Argon2d, or Argon2id (See section 3.4) i′, j′ ← GetBlockIndexes(i, j) if j == 0 then Bi[0] = G(Bi[columnCount-1], Bi′[j′]) else Bi[j] = G(Bi[j-1], Bi′[j′]) Compute final block C as the XOR of the last column of each row C ← B0[columnCount-1] for i ← 1 to parallelism-1 do C ← C xor Bi[columnCount-1] Compute output tag return Hash(C, tagLength)
Değişken uzunluklu özet fonksiyonu
Argon2, 232 byte uzunluğuna kadar özet üretebilen özet fonksiyonunu kullanır. Bu özet fonksiyonu dahili olarak Blake2 üzerine kuruludur.
Function Hash(message, digestSize) Inputs: message: Bytes (0..232-1) Message to be hashed digestSize: Integer (1..232) Desired number of bytes to be returned Output: digest: Bytes (digestSize) The resulting generated bytes, digestSize bytes long Hash is a variable-length hash function, built using Blake2b, capable of generating digests up to 232 bytes. If the requested digestSize is 64-bytes or lower, then we use Blake2b directly if (digestSize <= 64) then return Blake2b(digestSize ∥ message, digestSize) //concatenate 32-bit little endian digestSize with the message bytes For desired hashes over 64-bytes (e.g. 1024 bytes for Argon2 blocks), we use Blake2b to generate twice the number of needed 64-byte blocks, and then only use 32-bytes from each block Calculate the number of whole blocks (knowing we're only going to use 32-bytes from each) r ← Ceil(digestSize/32)-1; Generate r whole blocks. Initial block is generated from message V1 ← Blake2b(digestSize ∥ message, 64); Subsequent blocks are generated from previous blocks for i ← 2 to r do Vi ← Blake2b(Vi-1, 64) Generate the final (possibly partial) block partialBytesNeeded ← digestSize – 32*r; Vr+1 ← Blake2b(Vr, partialBytesNeeded) Concatenate the first 32-bytes of each block Vi (except the possibly partial last block, which we take the whole thing) Let Ai represent the lower 32-bytes of block Vi return A1 ∥ A2 ∥ ... ∥ Ar ∥ Vr+1
Kaynakça
- ^ ""Şifre Karma Yarışması"". 7 Nisan 2019 tarihinde kaynağından . Erişim tarihi: 31 Mart 2019.
- ^ Jos Wetzels (8 Şubat 2016). "Open Sesame: The Password Hashing Competition and Argon2" (PDF). 21 Eylül 2020 tarihinde kaynağından (PDF). Erişim tarihi: 7 Nisan 2019.
- ^ Argon2: şifre karma ve diğer uygulamalar için hafızası zorlama fonksiyonu 5 Haziran 2019 tarihinde Wayback Machine sitesinde ., Alex Biryukov, et al, 1 Ekim 2015
- ^ . draft-irtf-cfrg-argon2-03. 31 Mart 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 16 Ağustos 2017.
- ^ a b Joël Alwen, Jeremiah Blocki (5 Ağustos 2016). "Towards Practical Attacks on Argon2i and Balloon Hashing" (PDF). 11 Haziran 2020 tarihinde kaynağından (PDF). Erişim tarihi: 7 Nisan 2019.
- ^ Henry Corrigan-Gibbs, Dan Boneh, Stuart Schechter (14 Ocak 2016). "Balloon Hashing: Provably Space-Hard Hash Functions with Data-Independent Access Patterns" (PDF). 12 Aralık 2018 tarihinde kaynağından (PDF). Erişim tarihi: 31 Mart 2019.
- ^ a b "[Cfrg] Argon2 v.1.3". www.ietf.org. 30 Nisan 2016 tarihinde kaynağından . Erişim tarihi: 30 Ekim 2016.
- ^ Joel Alwen, Jeremiah Blocki (19 Şubat 2016). "Efficiently Computing Data-Independent Memory-Hard Functions" (PDF). 12 Aralık 2018 tarihinde kaynağından (PDF). Erişim tarihi: 7 Nisan 2019.
Dış bağlantılar
- . 2 Nisan 2019 tarihinde kaynağından arşivlendi.
- (PDF). 12 Aralık 2018 tarihinde kaynağından (PDF) arşivlendi.
- . 7 Nisan 2019 tarihinde kaynağından arşivlendi.
- . 31 Mart 2019 tarihinde kaynağından arşivlendi.
- (PDF). 12 Aralık 2018 tarihinde kaynağından (PDF) arşivlendi.
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Argon2 Temmuz 2015 te Parola Ozetleme Yarismasinin galibi olarak secilen anahtar turetme fonksiyonudur Luksemburg Universitesi nden Alex Biryukov Daniel Dinu ve Dmitry Khovratovich tarafindan tasarlanmistir Argon2 nin referans uygulamasi CC0 lisansi yani kamu mali veya Apache License 2 0 altinda yayinlanmis ve uc ilgili surum saglamistir Argon2d GPU kirilma saldirilarina karsi direnci en ust duzeye cikarir Argon2d bellek dizisine parola bagimli bir sirayla erisir bu da zaman bellek takasi TMTO saldirilarinin olasiligini azaltir ancak olasi yan kanal saldirilari sunar Argon2i yan kanal saldirilarina dayanacak sekilde optimize edilmistir Bellek dizisine parola bagimsiz bir sirada erisir Argon2id hibrit bir versiyondur Ilk bellek gecisi icin Argon2i yaklasimini ve sonraki gecisler icin Argon2d yaklasimini izler Internet taslagi diger iki moddan birinin tercih edilmesini gerektiren durumlar olmasi haricinde Argon2id kullanilmasini onerir Uc modun her biri asagida verilen uc parametre ile tanimlama yapmaya izin verir calisma suresi hafiza gerekliligi paralellik derecesiKriptanalizArgon2d ye uygulanabilecek genel bir kripto analizi olmamasina ragmen Argon2i fonksiyonuna karsi yayinlanan iki saldiri vardir Ilk saldiri sadece Argon2i nin eski surumune uygulanabilirken ikincisi en son surume kadar uzatilmistir 1 3 Ilk saldiri zaman cezasi olmadan istenen alanin ceyregi ile beste biri arasinda kullanilmasi ile tek gecisli Argon2i fonksiyonunu hesaplamanin ve yine zaman cezasi olmadan sadece N e lt N 2 71 alani kullanarak bircok gecisli Argon2i hesaplamanin mumkun oldugunu gostermektedir Argon2 yazarlarina gore bu saldiri vektoru 1 3 surumunde duzeltilmistir Ikinci saldiri Argon2i nin secilen tum parametreler icin ornegin s alan maliyeti t zaman maliyeti ve n s t olan izlek sayisi karmasikligi O n7 4 log n olan bir algoritma ile hesaplanabildigini gostermektedir Argon2 yazarlari Argon2i uc veya daha fazla gecisle kullanilirsa bu saldirinin etkili olmadigini iddia eder Bununla birlikte Joel Alwen ve Jeremiah Blocki saldiriyi iyilestirmis ve saldirinin basarisiz olmasi icin Argon2i 1 3 un bellek uzerinde 10 dan fazla gecise ihtiyac duydugunu gostermistir AlgoritmaFunction Argon2 Inputs password P Bytes 0 232 1 Password or message to be hashed salt S Bytes 8 232 1 Salt 16 bytes recommended for password hashing parallelism p Number 1 224 1 Degree of parallelism i e number of threads tagLength T Number 4 232 1 Desired number of returned bytes memorySizeKB m Number 8p 232 1 Amount of memory in https en wikipedia org wiki Kibibyte 30 Mart 2019 tarihinde Wayback Machine sitesinde arsivlendi kibibytes to use iterations t Number 1 232 1 Number of iterations to perform version v Number 0x13 The current version is 0x13 19 decimal key K Bytes 0 232 1 Optional key Errata PDF says 0 32 bytes RFC says 0 232 bytes associatedData X Bytes 0 232 1 Optional arbitrary extra data hashType y Number 0 Argon2d 1 Argon2i 2 Argon2id Output tag Bytes tagLength The resulting generated bytes tagLength bytes long Generate initial 64 byte block H0 All the input parameters are concatenated and input as a source of additional entropy Errata RFC says H0 is 64 bits PDF says H0 is 64 bytes Errata RFC says the Hash is H the PDF says it s ℋ but doesn t document what ℋ is It s actually Blake2b Variable length items are prepended with their length as 32 bit little endian integers buffer parallelism tagLength memorySizeKB iterations version hashType Length password Password Length salt salt Length key key Length associatedData associatedData H0 Blake2b buffer 64 default hash size of Blake2b is 64 bytes Calculate number of 1 KB blocks by rounding down memorySizeKB to the nearest multiple of 4 parallelism https en wikipedia org wiki Kibibyte 30 Mart 2019 tarihinde Wayback Machine sitesinde arsivlendi kibibytes blockCount Floor memorySizeKB 4 parallelism Allocate two dimensional array of 1 KiB blocks parallelism rows x columnCount columns columnCount blockCount parallelism In the RFC columnCount is referred to as q Compute the first and second block i e column zero and one of each lane i e row for i 0 to parallelism 1 do for each row Bi 0 Hash H0 0 i 1024 Generate a 1024 byte digest Bi 1 Hash H0 1 i 1024 Generate a 1024 byte digest Compute remaining columns of each lane for i 0 to parallelism 1 do for each row for j 2 to columnCount 1 do for each subsequent column i and j indexes depend if it s Argon2i Argon2d or Argon2id See section 3 4 i j GetBlockIndexes i j the GetBlockIndexes function is not defined Bi j G Bi j 1 Bi j the G hash function is not defined Further passes when iterations gt 1 for nIteration 2 to iterations do for i 0 to parallelism 1 do for each row for j 0 to columnCount 1 do for each subsequent column i and j indexes depend if it s Argon2i Argon2d or Argon2id See section 3 4 i j GetBlockIndexes i j if j 0 then Bi 0 G Bi columnCount 1 Bi j else Bi j G Bi j 1 Bi j Compute final block C as the XOR of the last column of each row C B0 columnCount 1 for i 1 to parallelism 1 do C C xor Bi columnCount 1 Compute output tag return Hash C tagLength Degisken uzunluklu ozet fonksiyonu Argon2 232 byte uzunluguna kadar ozet uretebilen ozet fonksiyonunu kullanir Bu ozet fonksiyonu dahili olarak Blake2 uzerine kuruludur Function Hash message digestSize Inputs message Bytes 0 232 1 Message to be hashed digestSize Integer 1 232 Desired number of bytes to be returned Output digest Bytes digestSize The resulting generated bytes digestSize bytes long Hash is a variable length hash function built using Blake2b capable of generating digests up to 232 bytes If the requested digestSize is 64 bytes or lower then we use Blake2b directly if digestSize lt 64 then return Blake2b digestSize message digestSize concatenate 32 bit little endian digestSize with the message bytes For desired hashes over 64 bytes e g 1024 bytes for Argon2 blocks we use Blake2b to generate twice the number of needed 64 byte blocks and then only use 32 bytes from each block Calculate the number of whole blocks knowing we re only going to use 32 bytes from each r Ceil digestSize 32 1 Generate r whole blocks Initial block is generated from message V1 Blake2b digestSize message 64 Subsequent blocks are generated from previous blocks for i 2 to r do Vi Blake2b Vi 1 64 Generate the final possibly partial block partialBytesNeeded digestSize 32 r Vr 1 Blake2b Vr partialBytesNeeded Concatenate the first 32 bytes of each block Vi except the possibly partial last block which we take the whole thing Let Ai represent the lower 32 bytes of block Vi return A1 A2 Ar Vr 1Kaynakca Sifre Karma Yarismasi 7 Nisan 2019 tarihinde kaynagindan Erisim tarihi 31 Mart 2019 Jos Wetzels 8 Subat 2016 Open Sesame The Password Hashing Competition and Argon2 PDF 21 Eylul 2020 tarihinde kaynagindan PDF Erisim tarihi 7 Nisan 2019 Argon2 sifre karma ve diger uygulamalar icin hafizasi zorlama fonksiyonu 5 Haziran 2019 tarihinde Wayback Machine sitesinde Alex Biryukov et al 1 Ekim 2015 draft irtf cfrg argon2 03 31 Mart 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 16 Agustos 2017 a b Joel Alwen Jeremiah Blocki 5 Agustos 2016 Towards Practical Attacks on Argon2i and Balloon Hashing PDF 11 Haziran 2020 tarihinde kaynagindan PDF Erisim tarihi 7 Nisan 2019 Henry Corrigan Gibbs Dan Boneh Stuart Schechter 14 Ocak 2016 Balloon Hashing Provably Space Hard Hash Functions with Data Independent Access Patterns PDF 12 Aralik 2018 tarihinde kaynagindan PDF Erisim tarihi 31 Mart 2019 a b Cfrg Argon2 v 1 3 www ietf org 30 Nisan 2016 tarihinde kaynagindan Erisim tarihi 30 Ekim 2016 Joel Alwen Jeremiah Blocki 19 Subat 2016 Efficiently Computing Data Independent Memory Hard Functions PDF 12 Aralik 2018 tarihinde kaynagindan PDF Erisim tarihi 7 Nisan 2019 Dis baglantilar 2 Nisan 2019 tarihinde kaynagindan arsivlendi PDF 12 Aralik 2018 tarihinde kaynagindan PDF arsivlendi 7 Nisan 2019 tarihinde kaynagindan arsivlendi 31 Mart 2019 tarihinde kaynagindan arsivlendi PDF 12 Aralik 2018 tarihinde kaynagindan PDF arsivlendi