2009-08-02 14 views
7

मैं किसी सुरक्षित (क्रिप्टोग्राफिक) हैश निम्नलिखित गुणों के साथ समारोह की जरूरत है:सरल (कोड के लिए) सुरक्षित हैश फंक्शन

  1. संभव के रूप में कुछ पंक्तियों में कोडित किया जा सकता है (R5RS योजना में)। उम्मीद है कि 50 से कम।
  2. पासवर्ड-लंबाई डेटा के कारण मेमोरी और सीपीयू प्रदर्शन।

सबसे सुरक्षित हैश फंक्शन मेरे मन में गति/स्मृति क्षमता के साथ तैयार कर रहे हैं पा सकते हैं (उदाहरण के लिए यह सुपर कुशल हो या डेटा की बाइट के लाखों लोगों के लिए हैश बनाने के लिए नहीं है) और इसके परिणामस्वरूप कोड करने के लिए जटिल होते हैं । Handbook of applied cryptography. Google Books

धन्यवाद:

वर्तमान उम्मीदवार मैश-1 (या मैश 2) है।

संपादित करें: अब तक आपके उत्तरों के लिए धन्यवाद। कृपया मुझे क्षमा करें यदि निम्नलिखित कठोर के रूप में आता है, तो मैं बस स्पष्ट होना चाहता हूं। कृपया मेरा भरोसा करें कि मैंने अपना होमवर्क किया है और "मानक" विकल्प माना है। मुझे पता है कि सबसे आसान काम उन लोगों में से एक का उपयोग करना है, लेकिन यह वह नहीं है जिसे मैं ढूंढ रहा हूं।

एक प्रश्न जो मैं उत्तर देने का प्रयास कर रहा हूं वह है: क्रिप्टोग्राफ़िक रूप से सुरक्षित हैश एल्गोरिदम को "पठनीय" कोड की सबसे छोटी राशि में कार्यान्वित किया जा सकता है?

मैंने पहले से ही सबसे अच्छा उम्मीदवार पोस्ट कर लिया है जो मुझे मिल सकता है। कुछ आसान के बारे में कोई सुझाव, या मैश -1/2 के बारे में टिप्पणी सबसे उपयोगी होगी।

+3

क्या आप इसे सीखने के अभ्यास के रूप में कर रहे हैं क्योंकि स्पष्ट रूप से मैं आमतौर पर ज्ञात एल्गोरिदम के अलावा कुछ भी भरोसा नहीं करता। –

+0

आपके पास जो समस्या हो रही है वह यह है कि कोई भी अपने दिल पर अपना हाथ रखने को तैयार नहीं है और कहता है कि एक्स एक्स सुरक्षित है जब एक्स थोड़ा-सा अध्ययन किया गया क्रिप्टो आदिम है। इसका कारण यह है कि "सुरक्षित" का अर्थ आम तौर पर "महत्वपूर्ण ध्यान देने के बावजूद टूटा नहीं गया है"। – caf

+0

आपको वास्तव में अपनी सुरक्षा आवश्यकताओं को स्पष्ट करने की आवश्यकता है: यदि आप सबसे आम हैश एल्गोरिदम में से एक नहीं चुनते हैं तो आप एक सुरक्षा व्यापार-बंद कर रहे हैं, क्योंकि यह अधिक संभावना है कि अज्ञात कमजोरी है। "सुरक्षित" बाइनरी मान नहीं है। आप SHA-512 का उपयोग करने के इच्छुक नहीं हैं क्योंकि यह लागू करने के लिए बहुत जटिल है। इसलिए हमें यह जानने में सहायता करें कि आप कितनी सुरक्षा को आसान कार्यान्वयन के लिए व्यापार करना चाहते हैं। क्या आप बस _most_ सुरक्षित हैश की तलाश कर रहे हैं जिसे योजना के 50 लाइनों में लागू किया जा सकता है? भले ही उस एल्गोरिदम को तोड़ने की संभावना है, कहें, 10 साल? –

उत्तर

2

आप दक्षता पर सादगी और शैक्षणिक मूल्य पसंद करते हैं तो VSH हैश फंक्शन के लिए एक विकल्प हो सकता है। यह मजबूत तर्कों के साथ आता है कि वीएसएच टकराव प्रतिरोधी हैश फ़ंक्शन है, हालांकि इस फ़ंक्शन में कुछ अन्य गुणों (उदा। छद्म यादृच्छिकता) की कमी है जो अन्य हैश फ़ंक्शन हैं।

+0

ऐसा लगता है कि मैं क्या खोज रहा हूं। मैंने कागज को एक स्कीम दिया है और आपका जवाब स्वीकार कर लिया है। धन्यवाद। – z5h

1

TrueCrypt source देखें। वे कई मजबूत हैश कार्यों को लागू करते हैं। केवल मानक चेतावनी, मौजूदा कार्यान्वयन या फिर भी बदतर को संशोधित करना मूर्ख नहीं है, अपने आप का उपयोग करें। यह लगभग निश्चित रूप से कमजोरी इंजेक्षन होगा। मुझे एहसास है कि आप यहां ऐसा नहीं कर रहे हैं, लेकिन सिर्फ एक अस्वीकरण। :)

4

यदि आप वास्तव में कुछ सुरक्षित (वास्तव में, एक एन्क्रिप्शन एल्गोरिदम के हिस्से के रूप में) के उद्देश्य के लिए एक सुरक्षित हैश फ़ंक्शन चाहते हैं, तो आपको SHA-512 (या शायद RIPEMD-160) के लाइब्रेरी प्रवर्तन का उपयोग करके सबसे अच्छा सेवा दी जाएगी या कुछ अन्य)।

यदि आप इसे हैशिंग पासवर्ड के लिए चाहते हैं, तो मैं कहूंगा कि माश जैसे हैश फ़ंक्शन ब्रूट फोर्स (जब नमक के साथ उपयोग किया जाता है) और इंद्रधनुष तालिकाओं के प्रतिरोधी होने के बिल को फिट करेगा। मैं अभी भी इसका उपयोग नहीं करता जब तक कि मुझे लाइब्रेरी इम्प्मेंटेशन का उपयोग करने से मुझे रोकने या रोकने की कठोर आवश्यकताएं नहीं होतीं - लेकिन ऐसा लगता है कि आपके पास बस यही हो सकता है।

यदि आप इसे कम सुरक्षित के लिए चाहते हैं, तो फ़ाइल अखंडता जांच कहें, लगभग कुछ भी तब तक नहीं होगा जब तक कि आप टकराव उत्पन्न करने वाले दुर्भावनापूर्ण उपयोगकर्ताओं के बारे में स्पष्ट रूप से चिंतित न हों। उस स्थिति में, आप जो भी सुरक्षा कर रहे हैं उसके मूल्य के आधार पर, मैं एमएएसएच जैसे कुछ आसान से SHA-512 या RIPEMD-320 जैसे कुछ प्रतिरोधी से लेकर होगा।

2

आपकी आवश्यकताओं के लिए, मैं SHA-3 finalists देखेंगे।

यदि आपके पास एईएस आदिम एन्क्रिप्शन के लिए लागू किया गया है, तो आप इसका उपयोग कई कार्यों को अपेक्षाकृत सरल रूप से लागू करने के लिए कर सकते हैं।

अन्यथा, मुझे लगता है कि मैं डैनियल बर्नस्टीन के Cubehash के साथ जाऊंगा। उसमें से कुछ "सरल लालित्य" दिख रहा है जिसे आप ढूंढ रहे थे। धारा 12 के अनुसार

+0

धन्यवाद। यह एक दिलचस्प संभावना की तरह दिखता है। – z5h

2

।ब्रूस श्नीयर की "एप्लाइड क्रिप्टोग्राफी" की 12: "ब्लॉक-चेनिंग मोड में एक-तरफा हैश फ़ंक्शन के रूप में सार्वजनिक-कुंजी एन्क्रिप्शन एल्गोरिदम का उपयोग करना संभव है।"

आरएसए (निजी कुंजी को त्यागने के साथ) एक उदाहरण के रूप में सूचीबद्ध है। सुरक्षा आरएसए के रूप में मजबूत है।

आरएसए एन्क्रिप्शन चरण लागू करने के लिए काफी सरल है। विशेष रूप से ऐसी भाषा में जिसमें मनमाने ढंग से पूर्णांक पूर्णांक होते हैं।

2 चेतावनी: 1. अधिकांश (सभी) अन्य सुरक्षित हैश कार्यों की तुलना में बहुत धीमी है। जो मेरे लिए ठीक है। 2. यदि आपने कोड में अपनी सार्वजनिक कुंजी को कड़ी मेहनत की है, तो दुनिया को भरोसा करना होगा कि आपने अपना निजी कुंजी डेटा छोड़ दिया है। या अपनी सार्वजनिक निजी कुंजी बनाओ।

जैसे ही मेरे पास एक कामकाजी उदाहरण है, मैं कोड पोस्ट करूंगा।

संपादित करें: यहां यह है। 30 लाइनें सरल। सुरक्षित। संपादित करें 2: जो मैंने वास्तव में शामिल किया वह एक संस्करण है, और काम नहीं कर सकता है। इस पोस्ट के नीचे टिप्पणियां देखें और अपडेट के लिए देखें।

; compute a^d mod n 
(define powmod 
    (lambda (a d n) 
    (cond 
     ((= 0 d) 1) 
     ((= 1 d) (modulo a n)) 
     ((= 0 (modulo d 2)) (modulo (expt (powmod a (/ d 2) n) 2) n)) 
     (else 
     (modulo (* (powmod a 1 n) (powmod a (- d 1) n)) n))))) 

(define foldr 
    (lambda (func end lst) 
    (if (null? lst) 
     end 
     (func (car lst) (foldr func end (cdr lst)))))) 

; something to turn a string into a number 
(define any-string->number 
    (lambda (s) 
    (foldr 
     (lambda (a b) (+ a (* 256 b))) 
     0 
     (map char->integer (string->list s))))) 

; some big primes 
(define p 325981479175658910158495167696993467513669112200235950741366213684181287869366665231) 
(define q 930416184994449450269535709442344346507738432154879695027334802205487824589832585453) 

; hash turns a string into a number 
; see discrete logarithms. the inverse of this is *hard* to compute 
; http://en.wikipedia.org/wiki/Discrete_logarithm 
(define hash 
    (lambda (s) 
    (powmod (any-string->number s) p q))) 
+2

मैंने वास्तव में उस पर सुझाव देने पर विचार किया, लेकिन इसके खिलाफ फैसला किया। एक और नुकसान यह है कि आउटपुट काफी बड़ा है: 128 बाइट्स यदि आप 1024-बिट मॉड्यूलस का उपयोग करते हैं। साथ ही: याद रखें कि आपको इनपुट को ब्लॉक में विभाजित करना होगा और परिणामों को चेन करना होगा (या मॉड्यूल से इनपुट बड़ा होने पर बस असफल हो)। –

+6

इसके अलावा: आपने जो भी लागू किया है वह न तो आरएसए और न ही डिफी-हेलमैन है। असल में, यह बल्कि तुच्छ रूप से तोड़ने योग्य है। एक दिया गया (एक^पी मॉड क्यू) ढूँढना, पी और क्यू आसान है। असतत लॉगरिदम समस्या एक दिया गया है (पी^एक मॉड क्यू), पी और क्यू। –

+1

धन्यवाद रसमस। आप इस धागे में सहायक रहे हैं। आरएसए के उपयोग को समझाते हुए "एप्लाइड क्रिप्टोग्राफी" के उसी खंड में, इस विधि का उल्लेख किया गया है। मेरे पास इस समय मेरे साथ किताब नहीं है, लेकिन मैं इसके बारे में काफी निश्चित हूं। जब मैं घर जाता हूं तो मैं दोबारा जांच करूंगा। मैं देखता हूं कि यह बिल्कुल अलग लॉगरिदम समस्या नहीं है। लेकिन आरएसए में हमारे पास अभी भी संदेश^ई मॉड एन है, जहां कुछ primes p q के लिए n (p-1) (q-1) है, और ई अपेक्षाकृत प्रमुख है n। यह मामूली रूप से टूटने योग्य यह प्रतीत होता है कि आरएसए भी है। क्या आप मुझे एल्गोरिदम की दिशा में इंगित कर सकते हैं जो इसे तोड़ता है? – z5h

संबंधित मुद्दे