Kriptografide, scrypt (telaffuz "es-kript"), Colin Percival tarafından Tarsnap çevrimiçi yedekleme hizmeti için oluşturulan bir parola tabanlı anahtar türetme fonksiyonudur. Bu algoritma, büyük miktarda bellek gerektirerek büyük ölçekli özel donanım saldırılarını gerçekleştirmeyi pahalı hale getirmek için özel olarak tasarlanmıştır. 2016 yılında, scrypt algoritması IETF tarafından RFC 7914 olarak yayınlandı. Scrypt algoritmasının, ArtForz kullanıcı adına sahip ve gerçek adı bilinmeyen bir programcı tarafından implemente edilmiş, basitleştirilmiş bir sürümü, önce Tenebrix'te ve ardından Fairbrix ve Litecoin olmak üzere bir dizi kripto para birimi tarafından iş kanıtı şeması olarak kullanıldı.
Giriş
Parola tabanlı bir anahtar türetme fonksiyonu (parola tabanlı KDF), genel olarak hesaplama açısından yoğun olacak şekilde, hesaplanması nispeten uzun zaman almak üzere (birkaç yüz milisaniye civarlarında) tasarlanmıştır. Ancak meşru kullanıcıların, işlem başına yalnızca bir kez (örneğin kimlik doğrulama) bir işlemi gerçekleştirmeleri gerektiği için bu süre göz ardı edilebilir. Buna rağmen, bir kaba kuvvet (brute-force) saldırısının bu işlemi milyarlarca kez gerçekleştirmesi gerektiği göz önüne alındığında, zaman gereksinimleri önemli ve dolayısıyla kısıtlayıcı hale gelir.
Önceki parola tabanlı KDF'lerin (RSA Laboratories'den gelen popüler PBKDF2 gibi) göreceli olarak düşük kaynak(sistem) talepleri vardır, bu da ayrıntılı donanım veya çok fazla bellek gerektirmedikleri anlamına gelir. Bu nedenle donanımda kolay ve ucuz bir şekilde uygulanırlar (örneğin bir ASIC veya bir FPGA üzerinde ). Bu, yeterli kaynaklara sahip bir saldırganın donanımdaki algoritmanın yüzlerce hatta binlerce farklı implementasyonunu üreterek ve her birinin anahtar alanın farklı bir alt kümesini aramasını sağlayarak geniş çaplı bir paralel saldırı başlatmasına olanak sağlar. Bu, kaba kuvvet saldırısını tamamlamak için gereken süreyi, mevcut implementasyonların sayısına bölerek büyük olasılıkla makul bir zaman dilimine indirger.
Scrypt fonksiyonu, algoritmanın kaynak taleplerini artırarak bu tür girişimleri engellemek için tasarlanmıştır. Spesifik olarak, algoritma diğer parola tabanlı KDF'lere kıyasla büyük miktarda bellek kullanmak üzere tasarlanmıştır ve bu sayede donanım uygulamasının boyutunu ve maliyetini çok daha pahalı hale getirir ve bu nedenle belirli miktarda mali kaynağa sahip bir saldırganın kullanabileceği paralellik miktarını sınırlar.
Genel bakış
Scrypt'in büyük bellek gereksinimleri, algoritmanın bir parçası olarak üretilen büyük bir sözde rassal bit dizgisi vektörü tarafından sağlanır. Vektör oluşturulduktan sonra, elementlerine sözde rassal sırayla erişilir ve türetilmiş anahtarı üretmek için birleştirilir. Basit bir uygulamanın, tüm vektörün RAM'de tutulması gerekir, böylece gerektiği gibi erişilebilir.
Vektörün elemanları algoritmik olarak üretildiğinden, bir anda sadece bir elemanı hafızaya kaydedecek ve bu nedenle hafıza gereksinimlerini önemli ölçüde azaltacak bir şekilde, her eleman anında gerektiği gibi üretilebilir. Buna rağmen, her bir elemanın üretilmesinin hesaplama açısından pahalı olması amaçlanmıştır ve elemanlara fonksiyonun yürütülmesi boyunca birçok kez erişilmesi beklenmektedir. Bu sayede, büyük bellek gereksinimlerinden kurtulmak için hızdan önemli bir derecede vazgeçilmesi gerekir.
Bu tür bir zaman-hafıza değiş tokuşu genellikle bilgisayar algoritmalarında mevcuttur: daha fazla bellek kullanma maliyetiyle hız arttırılabilir veya daha fazla işlem gerçekleştirme ve gerekli sürecin uzaması maliyetiyle bellek gereksinimleri azaltılabilir. Script'in ardındaki fikir, bu takası kasıtlı olarak her iki yönde de maliyetli yapmaktır. Böylece bir saldırgan çok fazla kaynak gerektirmeyen bir uygulama kullanabilir (ve bu nedenle sınırlı masrafla büyük ölçüde paralel olabilir) ancak çok yavaş çalışır ya da paralel olmak için daha hızlı çalışan ancak çok büyük bellek gereksinimi olan ve bu nedenle daha pahalı olan bir uygulamayı kullanabilir.
Algoritma
Algoritma aşağıdaki parametreleri içerir:
- Parola - Hash edilecek karakter dizisi.
- Tuz - Gökkuşağı Tablosu saldırılarına karşı korumak için hash değerini değiştiren bir karakter dizisi
- N - işlemci/bellek maliyeti parametresi.
- p - Paralelleştirme parametresi; p ≤ (232 - 1) * hLen / MFLen denklemini sağlayan pozitif bir tam sayı.
- dkLen - türetilmiş anahtarın (oktet cinsinden) amaçlanan çıktı uzunluğu; dkLen≤(232 - 1) * hLen denlemini sağlayan pozitif bir tam sayı.
- r - Ardışık hafızanın okuma boyutunu ve performansını hassas şekilde ayarlayan blok boyutu parametresi. Yaygın olarak kullanılan değer 8'dir.
- hLen - Hash fonksiyonunun oktet uzunluğu (SHA256 için 32).
- MFlen - Karıştırma işlevinin çıktısının oktet cinsinden uzunluğu (aşağıdaki SMix). RFC7914'te r*128 olarak tanımlanmıştır.
Function scrypt
Inputs: Passphrase: Bytes string of characters to be hashed Salt: Bytes random CostFactor (N): Integer CPU/memory cost parameter BlockSizeFactor (r): Integer blocksize parameter (8 is commonly used) ParallelizationFactor (p): Integer Parallelization parameter. (1..232-1 * hLen/MFlen) DesiredKeyLen: Integer Desired key length in bytes Output: DerivedKey: Bytes array of bytes, DesiredKeyLen long Step 1. Generate expensive salt blockSize ← 128*BlockSizeFactor //Length (in bytes) of the SMix mixing function output (e.g. 128*8 = 1024 bytes) Use PBKDF2 to generate initial 128*BlockSizeFactor*p bytes of data (e.g. 128*8*3 = 3072 bytes) Treat the result as an array of p elements, each entry being blocksize bytes (e.g. 3 elements, each 1024 bytes) [B0...Bp−1] ← PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor) Mix each block in B 2CostFactor times using ROMix function (each block can be mixed in parallel) for i ← 0 to p-1 do Bi ← ROMix(Bi, 2CostFactor) All the elements of B is our new "expensive" salt expensiveSalt ← B0∥B1∥B2∥ ... ∥Bp-1//where ∥ is concatenation Step 2. Use PBKDF2 to generate the desired number of bytes, but using the expensive salt we just generated return PBKDF2HMAC-SHA256(Passphrase, expensiveSalt, 1, DesiredKeyLen);
PBKDF2 (P, S, c, dkLen) notasyonu [rfc:2898 RFC] 2898'de tanımlandığı zaman ve c değeri iterasyon miktarını belirttiği zaman.
Bu gösterim, RFC 7914 tarafından PBKDF2'nin c=1 iken olan kullanımını belirtmek için kullanılır.
Function ROMix(Block, Iterations) Create Iterations copies of X X ← Block for i ← 0 to Iterations−1 do Vi ← X X ← BlockMix(X) for i ← 0 to Iterations−1 do j ← Integerify(X) mod Iterations X ← BlockMix(X xor Vj) return X
Burada RFC 7914 Integerify(X)'i X'in son 64 baytının little-endian(en önemli byte en sağda olan) A1 tam sayısı olarak yorumlamasının sonucu olarak tanımlar.
İterasyonlar N'in karesine eşit olduğu için, X'in son 64 baytı içinden sadece ilk Tavan(N / 8) olan ve little-endian tam sayı olan A2 olarak yorumlanan baytlar, Integerify (X) 'mod yineleme = A1 mod yineleme = A2 mod yineleme denkleminin hesaplanmasında kullanılır.
Function BlockMix(B): The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks) r ← Length(B) / 128; Treat B as an array of 2r 64-byte chuncks [B0...B2r-1] ← B X ← B2r−1for i ← 0 to 2r−1 do X ← Salsa20/8(X xor Bi) //Salsa20/8 hashes from 64-bytes to 64-bytes Yi ← X return ← Y0∥Y2∥...∥Y2r−2 ∥ Y1∥Y3∥...∥Y2r−1
Salsa20/8, Salsa20'nin 8'lik versiyon olduğu durumda .
Kripto Para Kullanımları
Scrypt birçok kripto para biriminde çalışma kanıtı algoritması olarak kullanılır. İlk olarak Tenebrix (Eylül 2011'de yayımlanan) için implemente edildi ve temel olarak kullanıldığı Litecoin ve Dogecoin de ayrıca scrypt algoritmasını benimseyip, kabul etmiştir. Scrypt kullanan kripto para birimlerinin madenciliği genellikle ekran kartlarında (GPU'lar ) gerçekleştirilir, çünkü ekran kartları işlemcilere kıyasla daha fazla işlem gücüne (bazı algoritmalar için) sahip olma eğilimindedirler. Bu durum, bu para birimlerinin Kasım ve Aralık 2013 aylarında yükselen fiyatı nedeniyle bu tarihlerde son model ekran kartlarının piyasada sayılarının azalmasına yol açtı.
Mayıs 2014 itibarıyla, scrypt tabanlı kripto para birimleri için özelleştirilmiş ASIC madencilik donanımı elde etmek mümkün. 2016 yılında ise InnoSilicon, 1.5 µJ/hash verim ile 14 nm teknolojisine sahip olduğunu iddia etmiştir.
Kaynakça
- ^ "Tarsnap - The scrypt key derivation function and encryption utility". www.tarsnap.com. 22 Nisan 2022 tarihinde kaynağından . Erişim tarihi: 14 Temmuz 2022.
- ^ Sıralı Belleğe Bağlı İşlevlerle Güçlü Anahtar Türevi 14 Nisan 2019 tarihinde Wayback Machine sitesinde ., Colin Percival
- ^ https://archive.today/20170219013427/http://www.innosilicon.com/html/mining-asic/14.html []
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
Kriptografide scrypt telaffuz es kript Colin Percival tarafindan Tarsnap cevrimici yedekleme hizmeti icin olusturulan bir parola tabanli anahtar turetme fonksiyonudur Bu algoritma buyuk miktarda bellek gerektirerek buyuk olcekli ozel donanim saldirilarini gerceklestirmeyi pahali hale getirmek icin ozel olarak tasarlanmistir 2016 yilinda scrypt algoritmasi IETF tarafindan RFC 7914 olarak yayinlandi Scrypt algoritmasinin ArtForz kullanici adina sahip ve gercek adi bilinmeyen bir programci tarafindan implemente edilmis basitlestirilmis bir surumu once Tenebrix te ve ardindan Fairbrix ve Litecoin olmak uzere bir dizi kripto para birimi tarafindan is kaniti semasi olarak kullanildi GirisParola tabanli bir anahtar turetme fonksiyonu parola tabanli KDF genel olarak hesaplama acisindan yogun olacak sekilde hesaplanmasi nispeten uzun zaman almak uzere birkac yuz milisaniye civarlarinda tasarlanmistir Ancak mesru kullanicilarin islem basina yalnizca bir kez ornegin kimlik dogrulama bir islemi gerceklestirmeleri gerektigi icin bu sure goz ardi edilebilir Buna ragmen bir kaba kuvvet brute force saldirisinin bu islemi milyarlarca kez gerceklestirmesi gerektigi goz onune alindiginda zaman gereksinimleri onemli ve dolayisiyla kisitlayici hale gelir Onceki parola tabanli KDF lerin RSA Laboratories den gelen populer PBKDF2 gibi goreceli olarak dusuk kaynak sistem talepleri vardir bu da ayrintili donanim veya cok fazla bellek gerektirmedikleri anlamina gelir Bu nedenle donanimda kolay ve ucuz bir sekilde uygulanirlar ornegin bir ASIC veya bir FPGA uzerinde Bu yeterli kaynaklara sahip bir saldirganin donanimdaki algoritmanin yuzlerce hatta binlerce farkli implementasyonunu ureterek ve her birinin anahtar alanin farkli bir alt kumesini aramasini saglayarak genis capli bir paralel saldiri baslatmasina olanak saglar Bu kaba kuvvet saldirisini tamamlamak icin gereken sureyi mevcut implementasyonlarin sayisina bolerek buyuk olasilikla makul bir zaman dilimine indirger Scrypt fonksiyonu algoritmanin kaynak taleplerini artirarak bu tur girisimleri engellemek icin tasarlanmistir Spesifik olarak algoritma diger parola tabanli KDF lere kiyasla buyuk miktarda bellek kullanmak uzere tasarlanmistir ve bu sayede donanim uygulamasinin boyutunu ve maliyetini cok daha pahali hale getirir ve bu nedenle belirli miktarda mali kaynaga sahip bir saldirganin kullanabilecegi paralellik miktarini sinirlar Genel bakisScrypt in buyuk bellek gereksinimleri algoritmanin bir parcasi olarak uretilen buyuk bir sozde rassal bit dizgisi vektoru tarafindan saglanir Vektor olusturulduktan sonra elementlerine sozde rassal sirayla erisilir ve turetilmis anahtari uretmek icin birlestirilir Basit bir uygulamanin tum vektorun RAM de tutulmasi gerekir boylece gerektigi gibi erisilebilir Vektorun elemanlari algoritmik olarak uretildiginden bir anda sadece bir elemani hafizaya kaydedecek ve bu nedenle hafiza gereksinimlerini onemli olcude azaltacak bir sekilde her eleman aninda gerektigi gibi uretilebilir Buna ragmen her bir elemanin uretilmesinin hesaplama acisindan pahali olmasi amaclanmistir ve elemanlara fonksiyonun yurutulmesi boyunca bircok kez erisilmesi beklenmektedir Bu sayede buyuk bellek gereksinimlerinden kurtulmak icin hizdan onemli bir derecede vazgecilmesi gerekir Bu tur bir zaman hafiza degis tokusu genellikle bilgisayar algoritmalarinda mevcuttur daha fazla bellek kullanma maliyetiyle hiz arttirilabilir veya daha fazla islem gerceklestirme ve gerekli surecin uzamasi maliyetiyle bellek gereksinimleri azaltilabilir Script in ardindaki fikir bu takasi kasitli olarak her iki yonde de maliyetli yapmaktir Boylece bir saldirgan cok fazla kaynak gerektirmeyen bir uygulama kullanabilir ve bu nedenle sinirli masrafla buyuk olcude paralel olabilir ancak cok yavas calisir ya da paralel olmak icin daha hizli calisan ancak cok buyuk bellek gereksinimi olan ve bu nedenle daha pahali olan bir uygulamayi kullanabilir AlgoritmaAlgoritma asagidaki parametreleri icerir Parola Hash edilecek karakter dizisi Tuz Gokkusagi Tablosu saldirilarina karsi korumak icin hash degerini degistiren bir karakter dizisi N islemci bellek maliyeti parametresi p Paralellestirme parametresi p 232 1 hLen MFLen denklemini saglayan pozitif bir tam sayi dkLen turetilmis anahtarin oktet cinsinden amaclanan cikti uzunlugu dkLen 232 1 hLen denlemini saglayan pozitif bir tam sayi r Ardisik hafizanin okuma boyutunu ve performansini hassas sekilde ayarlayan blok boyutu parametresi Yaygin olarak kullanilan deger 8 dir hLen Hash fonksiyonunun oktet uzunlugu SHA256 icin 32 MFlen Karistirma islevinin ciktisinin oktet cinsinden uzunlugu asagidaki SMix RFC7914 te r 128 olarak tanimlanmistir Function scrypt Inputs Passphrase Bytes string of characters to be hashed Salt Bytes random CostFactor N Integer CPU memory cost parameter BlockSizeFactor r Integer blocksize parameter 8 is commonly used ParallelizationFactor p Integer Parallelization parameter 1 232 1 hLen MFlen DesiredKeyLen Integer Desired key length in bytes Output DerivedKey Bytes array of bytes DesiredKeyLen long Step 1 Generate expensive salt blockSize 128 BlockSizeFactor Length in bytes of the SMix mixing function output e g 128 8 1024 bytes Use PBKDF2 to generate initial 128 BlockSizeFactor p bytes of data e g 128 8 3 3072 bytes Treat the result as an array of p elements each entry being blocksize bytes e g 3 elements each 1024 bytes B0 Bp 1 PBKDF2HMAC SHA256 Passphrase Salt 1 blockSize ParallelizationFactor Mix each block in B 2CostFactor times using ROMix function each block can be mixed in parallel for i 0 to p 1 do Bi ROMix Bi 2CostFactor All the elements of B is our new expensive salt expensiveSalt B0 B1 B2 Bp 1 where is concatenation Step 2 Use PBKDF2 to generate the desired number of bytes but using the expensive salt we just generated return PBKDF2HMAC SHA256 Passphrase expensiveSalt 1 DesiredKeyLen PBKDF2 P S c dkLen notasyonu rfc 2898 RFC 2898 de tanimlandigi zaman ve c degeri iterasyon miktarini belirttigi zaman Bu gosterim RFC 7914 tarafindan PBKDF2 nin c 1 iken olan kullanimini belirtmek icin kullanilir Function ROMix Block Iterations Create Iterations copies of X X Block for i 0 to Iterations 1 do Vi X X BlockMix X for i 0 to Iterations 1 do j Integerify X mod Iterations X BlockMix X xor Vj return X Burada RFC 7914 Integerify X i X in son 64 baytinin little endian en onemli byte en sagda olan A1 tam sayisi olarak yorumlamasinin sonucu olarak tanimlar Iterasyonlar N in karesine esit oldugu icin X in son 64 bayti icinden sadece ilk Tavan N 8 olan ve little endian tam sayi olan A2 olarak yorumlanan baytlar Integerify X mod yineleme A1 mod yineleme A2 mod yineleme denkleminin hesaplanmasinda kullanilir Function BlockMix B The block B is r 128 byte chunks which is equivalent of 2r 64 byte chunks r Length B 128 Treat B as an array of 2r 64 byte chuncks B0 B2r 1 B X B2r 1for i 0 to 2r 1 do X Salsa20 8 X xor Bi Salsa20 8 hashes from 64 bytes to 64 bytes Yi X return Y0 Y2 Y2r 2 Y1 Y3 Y2r 1 Salsa20 8 Salsa20 nin 8 lik versiyon oldugu durumda Kripto Para KullanimlariScrypt bircok kripto para biriminde calisma kaniti algoritmasi olarak kullanilir Ilk olarak Tenebrix Eylul 2011 de yayimlanan icin implemente edildi ve temel olarak kullanildigi Litecoin ve Dogecoin de ayrica scrypt algoritmasini benimseyip kabul etmistir Scrypt kullanan kripto para birimlerinin madenciligi genellikle ekran kartlarinda GPU lar gerceklestirilir cunku ekran kartlari islemcilere kiyasla daha fazla islem gucune bazi algoritmalar icin sahip olma egilimindedirler Bu durum bu para birimlerinin Kasim ve Aralik 2013 aylarinda yukselen fiyati nedeniyle bu tarihlerde son model ekran kartlarinin piyasada sayilarinin azalmasina yol acti Mayis 2014 itibariyla scrypt tabanli kripto para birimleri icin ozellestirilmis ASIC madencilik donanimi elde etmek mumkun 2016 yilinda ise InnoSilicon 1 5 µJ hash verim ile 14 nm teknolojisine sahip oldugunu iddia etmistir Kaynakca Tarsnap The scrypt key derivation function and encryption utility www tarsnap com 22 Nisan 2022 tarihinde kaynagindan Erisim tarihi 14 Temmuz 2022 Sirali Bellege Bagli Islevlerle Guclu Anahtar Turevi 14 Nisan 2019 tarihinde Wayback Machine sitesinde Colin Percival https archive today 20170219013427 http www innosilicon com html mining asic 14 html yalin URL