গিট কেন আরও আধুনিক এসএএচএ ব্যবহার করে না?


91

আমি গিতটি একটি সংশোধনের জন্য আইডি হিসাবে SHA-1 ডাইজেস্ট ব্যবহার করে সে সম্পর্কে পড়েছি। কেন এটি SHA এর আরও আধুনিক সংস্করণ ব্যবহার করে না?


4
পারফরম্যান্সই কেবলমাত্র আমি ভাবতে পারি, SHA-1 SHA-2 এর চেয়ে দ্রুত। ব্যক্তিগতভাবে আমি এটিকে একটি খারাপ সিদ্ধান্ত হিসাবে বিবেচনা করি, যেহেতু SHA-1 এর সংঘর্ষ প্রতিরোধের বদলে দুর্বল।
কোডসইনচওস

4
stackoverflow.com/questions/9392365/… - একটি সঠিক মিল নয়, তবে অনুরূপ গ্রাউন্ডটি জুড়েছে
সফটওয়্যারেন্স

6
এটি 2006 সালে গিট মেলিং তালিকায় আলোচনা করা হয়েছিল the পুরো থ্রেডটি দেখুন । সংক্ষিপ্তসার হিসাবে, লিনাস তখনই বলেছিলেন যে SHA-1 কেবলমাত্র যথেষ্ট অনন্য হওয়া দরকার যাতে সংঘর্ষগুলি ঘটে না, যা এটি। SHA-1 গিটের জন্য সুরক্ষা বৈশিষ্ট্য নয়। "যে কেউ অবিশ্বাস্য উত্স থেকে অন্ধভাবে ডেটা গ্রহণ করে সে অন্য অনেক উপায়ে স্ক্র্যাচ করা হয় যে হ্যাশ আক্রমণটি কেবল রাডারে প্রদর্শিত হয় না।" - লিনাস
tbc0

28
আপডেট করুন: বন্য এখন রয়েছে SHA-1 দুর্ঘটনায় shattered.it
drewr

4
Q1 2018: বিকল্প এসএইচএ সমর্থন করার জন্য এই প্রচেষ্টা চলছে: নীচে আমার উত্তর দেখুন
ভোনসি

উত্তর:


62

কেন এটি SHA এর আরও আধুনিক সংস্করণ ব্যবহার করে না?

ডিসেম্বর 2017: এটি হবে। এবং গিট 2.16 (কিউ 1 2018) হ'ল সেই উদ্দেশ্যটি চিত্রিত ও বাস্তবায়নের জন্য প্রথম প্রকাশ।

দ্রষ্টব্য: নীচে গিটটি দেখুন: এটি SHA-256 হবে

গিট ২.১it গিটে হ্যাশ ফাংশনটি কী ব্যবহৃত হয় তা সংজ্ঞায়িত করার জন্য একটি অবকাঠামো প্রস্তাব করবে এবং এটি বিভিন্ন কোডেপাথ জুড়ে নদীর গভীরতানিষ্টার প্রচেষ্টা শুরু করবে।

দেখুন কমিট c250e02 (28 নভেম্বর 2017) দ্বারা ( ``) র্যামজে জোন্সপ্রতিশ্রুতিবদ্ধ eb0ccfd
দেখুন , প্রতিশ্রুতিবদ্ধ 78a6766 , প্রতিশ্রুতি f50e766 , আবদ্ধ 65 (12 নভেম্বর 2017) দ্বারা ব্রায়ান এম। কার্লসন ( )(দ্বারা একীভূত junio সি Hamano - - মধ্যে কমিট 721cc43 , 13 ডিসেম্বর 2017)bk2204
gitster


হ্যাশ অ্যালগরিদমের প্রতিনিধিত্বকারী কাঠামো যুক্ত করুন

ভবিষ্যতে যেহেতু আমরা একটি অতিরিক্ত হ্যাশ অ্যালগরিদম সমর্থন করতে চাই, এমন একটি কাঠামো যুক্ত করুন যা একটি হ্যাশ অ্যালগরিদমকে প্রতিনিধিত্ব করে এবং এর সাথে অবশ্যই যেতে হবে এমন সমস্ত ডেটাহ্যাশ অ্যালগরিদমের সহজ গণনার অনুমতি দেওয়ার জন্য
একটি ধ্রুবক যুক্ত করুন । একটি বিমূর্ত API তৈরি করতে ফাংশন
প্রয়োগ করুন যা যে কোনও হ্যাশ অ্যালগরিদম ব্যবহার করতে পারে এবং এই এপিআই অনুসারে বিদ্যমান SHA1 ফাংশনগুলির জন্য মোড়ক ব্যবহার করতে পারে।typedefs

বাইনারি আকারের পাশাপাশি হেক্স আকারের জন্য একটি মান প্রকাশ করুন
যদিও একটি সর্বদা অন্যটির দ্বিগুণ হয়ে থাকে, দুটি মান দুটিই কোডবেজ জুড়ে ব্যবহার করা হয় এবং উভয়ই উন্নত পাঠযোগ্যতার জন্য সরবরাহ করে।

নাল অবজেক্ট আইডির জন্য হ্যাশ অ্যালগরিদম কাঠামোতে কোনও প্রবেশ অন্তর্ভুক্ত করবেন না।
যেহেতু এই মানটি সমস্ত শূন্য, উপযুক্ত আকারের যে কোনও আকারের সমস্ত শূন্য আইটেম আইডি ব্যবহার করা যেতে পারে এবং প্রতি-হ্যাশ ভিত্তিতে প্রদত্ত একটি সংরক্ষণ করার দরকার নেই।

বর্তমান হ্যাশ ফাংশন ট্রানজিশন পরিকল্পনা এমন একটি সময় কল্পনা করেছিল যখন আমরা SHA-1 বা নিউহ্যাশ ফর্ম্যাটে থাকা ব্যবহারকারী থেকে ইনপুট গ্রহণ করব।
যেহেতু আমরা বুঝতে পারি না ব্যবহারকারীটি কী সরবরাহ করেছে, তাই অজানা অ্যালগরিদমের প্রতিনিধিত্ব করে একটি ধ্রুবক যুক্ত করুন যাতে আমাদের নির্দেশ করতে পারে যে আমাদের সঠিক মানটি দেখতে হবে।


রেপো সেটআপের সাথে হ্যাশ অ্যালগরিদম সমর্থন সংহত করুন

গীতের ভবিষ্যতের সংস্করণগুলিতে আমরা একটি অতিরিক্ত হ্যাশ অ্যালগরিদম সমর্থন করার পরিকল্পনা করি।
সংগ্রহস্থল সেটআপের সাথে হ্যাশ অ্যালগরিদমগুলির গণনার সংহত করুন এবং স্ট্রাক্ট সংগ্রহস্থলে গণিত ডেটাতে একটি পয়েন্টার সংরক্ষণ করুন
অবশ্যই, আমরা বর্তমানে কেবল SHA-1 সমর্থন করি, তাই এই মানটিকে হার্ড-কোড করুন read_repository_format
ভবিষ্যতে, আমরা কনফিগারেশন থেকে এই মানটি গণনা করব।

একটি ধ্রুবক যুক্তthe_hash_algo করুন , যা hash_algoবিশ্বব্যাপী সংগ্রহস্থলের কাঠামোর পয়েন্টারে নির্দেশ করে ।
দ্রষ্টব্য যে এটি হ্যাশ যা ব্যবহারকারীর কাছে আইটেম প্রদর্শন করতে ব্যবহৃত হ্যাশ নয়, যা ডিস্কে ডেটা সিরিয়ালাইজ করতে ব্যবহৃত হয়।
রূপান্তর পরিকল্পনা অনুমান করে যে এগুলি আলাদা হতে পারে। এই কেস সরবরাহ করার জন্য
আমরা ভবিষ্যতে একটি অতিরিক্ত উপাদান যুক্ত করতে পারি (বলুন ui_hash_algo)।


অগাস্ট 2018 আপডেট করুন, গিট 2.19 (Q3 2018) এর জন্য, গিট SHA-256 কে নিউহ্যাশ হিসাবে বেছে নেবে বলে মনে হচ্ছে ।

দেখুন 0ed8d8d কমিট দ্বারা (04 আগস্ট 2018) জনাথন মধ্যে Nieder ( artagnon)
দেখুন কমিট 13f5e09 দ্বারা (25 জুলাই 2018) Ævar Arnfjörð Bjarmason ( avar)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 34f2297 , 20 আগস্ট 2018)

ডকhash-function-transition : SHA-256 কে নিউহ্যাশ হিসাবে চয়ন করুন

সুরক্ষার দৃষ্টিকোণ থেকে, দেখে মনে হচ্ছে SHA-256, BLAKE2, SHA3-256, K12 এবং আরও অনেকগুলি একই সুরক্ষার বৈশিষ্ট্য রয়েছে বলে বিশ্বাস করা হচ্ছে।
সুরক্ষার দৃষ্টিকোণ থেকে সমস্ত ভাল বিকল্প।

SHA-256 এর অনেকগুলি সুবিধা রয়েছে:

  • এটি প্রায় কিছুকাল ধরে হয়েছে, ব্যাপকভাবে ব্যবহৃত হয় এবং প্রায় প্রতিটি একক ক্রিপ্টো লাইব্রেরি দ্বারা সমর্থিত হয় (ওপেনএসএসএল, এমবেডটিএলএস, ক্রিপ্টোএনজি, সিকিউর ট্রান্সপোর্ট, ইত্যাদি)।

  • আপনি যখন SHA1DC এর সাথে তুলনা করেন, বেশিরভাগ ভেক্টরাইজড SHA-256 বাস্তবায়ন ত্বরণ ছাড়াই প্রকৃতপক্ষে দ্রুত।

  • যদি আমরা ওপেনজিপি (বা এমনকি, আমি মনে করি, সিএমএস) সহ স্বাক্ষরগুলি করছি, আমরা SHA-2 ব্যবহার করতে যাচ্ছি, সুতরাং যখন সেগুলির কোনও একটি পৃথক পৃথক অ্যালগরিদমের উপর নির্ভর করে আমাদের সুরক্ষা বোধ করা যায় না যখন আমরা কেবল একজনের উপর নির্ভর করতে পারি তখন একা সুরক্ষা ভঙ্গ করতে পারে।

সুতরাং SHA-256 এটি
এটি বলার জন্য হ্যাশ-ফাংশন-ট্রানজিশন ডিজাইন ডকটি আপডেট করুন।

এই প্যাচের পরে, স্ট্রিংয়ের " NewHash" পরিবর্তনশীল নাম t/t9700/test.pl হিসাবে ২০০৮ সাল থেকে কোনও সম্পর্কযুক্ত ব্যবহার ব্যতীত আর কোনও উদাহরণ নেই ।


আপনি এই রূপান্তরটি SHA 256 এ গিট 2.20 (Q4 2018) এর সাথে অগ্রগতিতে দেখতে পাচ্ছেন:

দেখুন কমিট 0d7c419 , dda6346 কমিট , eccb5a5 কমিট , 93eb00f কমিট , d8a3a69 কমিট , কমিট fbd0e37 , কমিট f690b6b , কমিট 49d1660 , কমিট 268babd , কমিট fa13080 , কমিট 7b5e614 , 58ce21b কমিট , কমিট 2f0c9e9 , 825544a কমিট (15 অক্টোবর 2018) দ্বারা ব্রায়ান মি । কার্লসন ( bk2204)SZEDER Gábor ( ) দ্বারা 6afedba (15 অক্টোবর 2018) কমিট করুন
দেখুন । (দ্বারা মার্জডszeder
Junio সি Hamano - gitster- মধ্যে d829d49 কমিট , 30 অক্টোবর 2018)

হার্ড-কোডেড ধ্রুবকগুলি প্রতিস্থাপন করুন

যথাযথ হিসাবে উল্লেখ হিসাবে GIT_MAX_HEXSZবা 40 টি-ভিত্তিক স্থির প্রতিস্থাপন করুন the_hash_algo। ব্যবহারের
সমস্ত ব্যবহারকে রূপান্তর করুন যাতে কোনও হ্যাশ দৈর্ঘ্যের জন্য উপযুক্ত হয় appropriate একটি হেক্স অবজেক্ট আইডি আকারের জন্য হার্ড-কোডড ধ্রুবক ব্যবহার না করে পার্সড অবজেক্ট আইডির পরে সেই বিন্দু থেকে গণিত পয়েন্টারটি ব্যবহার করতে স্যুইচ করুন ।GIT_SHA1_HEXSZthe_hash_algo
parse_oid_hex

GIT_SHA1_HEXSZআরও Git 2.22 (Q2 2019) এর সাথে সরিয়ে / প্রতিস্থাপন করা হবে এবং d4e568b কমিট করুন


এই রূপান্তরটি গিট ২.২১ (Q1 2019) দিয়ে অব্যাহত রয়েছে, যা sha-256 হ্যাশ যুক্ত করে এবং "নিউহ্যাশ" দিয়ে গিট নির্মাণের অনুমতি দেওয়ার জন্য কোডের মাধ্যমে প্লাগ করে।

দেখুন কমিট 4b4e291 , 27dc04c কমিট , 13eeedb কমিট , কমিট c166599 , কমিট 37649b7 , কমিট a2ce0a7 , কমিট 50c817e , 9a3a0ff কমিট , কমিট 0dab712 , কমিট 47edb64 (14 নভেম্বর 2018), এবং 2f90b9d কমিট , 1ccf07c কমিট (22 অক্টোবর 2018) দ্বারা ব্রায়ান মি । কার্লসন ( bk2204)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 33e4ae9 , 29 জানুয়ারী 2019)

SHA-256 সমর্থন (ফেব্রুয়ারী 2019) এর একটি বেস বাস্তবায়ন যুক্ত করুন

SHA-1 দুর্বল এবং আমাদের একটি নতুন হ্যাশ ফাংশনে রূপান্তর করতে হবে।
কিছু সময়ের জন্য, আমরা এই নতুন ফাংশনটিকে হিসাবে উল্লেখ করেছি NewHash
সম্প্রতি, আমরা SHA-256 হিসাবে বেছে নেওয়ারNewHash সিদ্ধান্ত নিয়েছি ।
SHA-256-র পছন্দের কারণগুলি এই থ্রেডে এবং হ্যাশ ফাংশন ট্রানজিশন ডকুমেন্টের প্রতিশ্রুতিবদ্ধ ইতিহাসে বর্ণিত হয়েছে

SHA-256 ভিত্তিক অফের বেসিক বাস্তবায়ন যুক্ত করুন libtomcrypt, যা পাবলিক ডোমেনে রয়েছে।
আমাদের কোডিং মানগুলি পূরণ করার জন্য এটি অনুকূলিত করুন এবং এটি পুনর্গঠন করুন।
SHA-1 ব্লক বাস্তবায়ন থেকে আপডেট এবং চূড়ান্ত ফাংশনগুলিতে টানুন, কারণ আমরা সমস্ত সংকলকগুলির সাথে এই ফাংশনটি সঠিকভাবে জানি। এই বাস্তবায়নটি SHA-1 এর চেয়ে ধীর, তবে ভবিষ্যতে কমিটগুলিতে আরও পারফরম্যান্ট বাস্তবায়ন চালু করা হবে।

হ্যাশ অ্যালগরিদমের তালিকায় SHA-256 ওয়্যার আপ করুন এবং অ্যালগোরিদম সঠিকভাবে কাজ করে এমন একটি পরীক্ষা যুক্ত করুন।

মনে রাখবেন যে এই প্যাচটি দিয়ে, এখনও গিতে SHA-256 ব্যবহার করে স্যুইচ করা সম্ভব নয়।
একটি বৃহত্তর হ্যাশ অ্যালগরিদম পরিচালনা করতে কোড তৈরি করতে অতিরিক্ত প্যাচগুলির প্রয়োজন এবং আরও পরীক্ষার সংশোধন করা দরকার।

hash: ওপেনএসএসএল ব্যবহার করে একটি SHA-256 বাস্তবায়ন যুক্ত করুন

আমাদের কাছে ইতিমধ্যে SHA-1 এর জন্য ওপেনএসএসএল রুটিন রয়েছে, তাই এসএএএ-256 এর জন্য রুটিনগুলিও যুক্ত করুন।

একটি কোর i7-6600U এ, এই SHA-256 বাস্তবায়ন SHA1DC SHA-1 প্রয়োগের সাথে অনুকূলভাবে তুলনা করে:

SHA-1: 157 MiB/s (64 byte chunks); 337 MiB/s (16 KiB chunks)
SHA-256: 165 MiB/s (64 byte chunks); 408 MiB/s (16 KiB chunks)

sha256: ব্যবহার করে একটি SHA-256 বাস্তবায়ন যুক্ত করুন libgcrypt

সাধারণত, সি এর চেয়ে অ্যাসেমব্লিতে লেখা ক্রিপ্টোগ্রাফিক রুটিনগুলির মধ্যে একজন আরও ভাল পারফরম্যান্স পান এবং এটি SHA-256 এর ক্ষেত্রেও সত্য।
এছাড়াও, বেশিরভাগ লিনাক্স ডিস্ট্রিবিউশন লাইসেন্সের কারণে ওপেনএসএসএলের বিপরীতে গিট লিঙ্ক বিতরণ করতে পারে না।

GnuPG সহ বেশিরভাগ সিস্টেমে থাকতে হবে libgcrypt, কারণ এটি GnuPG এর নির্ভরতা a
libgcryptকয়েকটি কিবি বা বৃহত্তর বার্তাগুলির জন্য SHA1DC প্রয়োগের চেয়েও দ্রুত।

তুলনার জন্য, একটি কোর i7-6600U এ, এই বাস্তবায়নটি 35 কিউবি / s এ 16 কিবি খণ্ড প্রক্রিয়াজাত করে যখন এসএএএডিসিডি 337 মাইবি / সেকেন্ডে সমতুল্য অংশগুলি প্রসেস করে।

এছাড়াও, এলবিজিক্রিপ্ট এলজিপিএল ২.১ এর অধীনে লাইসেন্সযুক্ত, যা জিপিএলের সাথে সামঞ্জস্যপূর্ণ। SHA-256 এর একটি বাস্তবায়ন যুক্ত করুন যা libgcrypt ব্যবহার করে।


আপগ্রেড প্রচেষ্টা গিট 2.24 (Q4 2019) এর সাথে চলছে

দেখুন aaa95df কমিট , be8e172 কমিট , 3f34d70 কমিট , fc06be3 কমিট , 69fa337 কমিট , 3a4d7aa কমিট , e0cb7cd কমিট , 8d4d86b কমিট , f6ca67d কমিট , কমিট dd336a5 , কমিট 894c0f6 , কমিট 4439c7a , কমিট 95518fa , e84f357 কমিট , fe9fec4 কমিট , 976ff7e কমিট , কমিট 703d2d4 , 9d958cc কমিট , কমিট 7962e04 , কমিট fee4930(18 আগস্ট 2019) ব্রায়ান মি। কার্লসন ( bk2204)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে 676278f কমিট , 11 অক্টোবর 2019)

GIT_SHA1_HEXSZহার্ড-কোডেড ধ্রুবক ব্যবহার করার পরিবর্তে ব্যবহারে স্যুইচ করুন the_hash_algo


গিট 2.26 (কিউ 12020) দিয়ে, পরীক্ষার স্ক্রিপ্টগুলি সেই দিনের জন্য প্রস্তুত থাকে যখন বস্তুর নামগুলি SHA-256 ব্যবহার করবে।

দেখুন 277eb5a কমিট , 44b6c05 কমিট , 7a868c5 কমিট , 1b8f39f কমিট , a8c17e3 কমিট , 8320722 কমিট , 74ad99b কমিট , ba1be1a কমিট , cba472d কমিট , 82d5aeb কমিট , কমিট 3c5e65c , কমিট 235d3cd , 1d86c8f কমিট , কমিট 525a7f1 , 7a1bcb2 কমিট , cb78f4f কমিট , কমিট 717c939 , প্রতিশ্রুতি 08a9dd8 , 215b60b প্রতিশ্রুতিবদ্ধ , 194264c প্রতিশ্রুতিবদ্ধ(21 ডিসেম্বর 2019) ব্রায়ান মি। কার্লসন ( bk2204)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে f52ab33 কমিট , 05 ফেব্রুয়ারী 2020)

উদাহরণ:

t4204: হ্যাশ আকার স্বাধীন করতে

সাইন-অফ-বাই: ব্রায়ান মি। কার্লসন

$OID_REGEXহার্ড-কোডেড নিয়মিত এক্সপ্রেশনের পরিবর্তে ব্যবহার করুন ।

সুতরাং, পরিবর্তে ব্যবহার করুন:

grep "^[a-f0-9]\{40\} $(git rev-parse HEAD)$" output

পরীক্ষাগুলি ব্যবহার করছে

grep "^$OID_REGEX $(git rev-parse HEAD)$" output

এবং কমিট bdee9cd (13 মে 2018) OID_REGEXথেকে এসেছেন ব্রায়ান এম। কার্লসন ( bk2204)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে 9472b13 কমিট , 30 মে 2018, গীত v2.18.0-rc0)

t/test-lib: পরিচয় করিয়ে দিন OID_REGEX

সাইন-অফ-বাই: ব্রায়ান মি। কার্লসন

বর্তমানে আমাদের একটি চলক $_x40,রয়েছে , যার মধ্যে একটি রেইজেক্স রয়েছে যা পুরো 40-অক্ষরের হেক্স ধ্রুবকের সাথে মেলে।

তবে, এর সাথে NewHash, আমাদের অবজেক্ট আইডি থাকবে যা 40 টির চেয়ে বেশি অক্ষরের।

যেমন একটি ক্ষেত্রে, $_x40একটি বিভ্রান্তিকর নাম হবে।

একটি $OID_REGEXভেরিয়েবল তৈরি করুন যা বর্তমান হ্যাশের দৈর্ঘ্য নির্বিশেষে যথাযথ অবজেক্ট আইডির সাথে মিলিত একটি রেজেক্সকে সর্বদা প্রতিফলিত করবে।

এবং, এখনও পরীক্ষার জন্য:

দেখুন কমিট f303765 , edf0424 কমিট , 5db24dc কমিট , d341e08 কমিট , কমিট 88ed241 , 48c10cc কমিট , f7ae8e6 কমিট , কমিট e70649b , a30f93b কমিট , a79eec2 কমিট , 796d138 কমিট , 417e45e কমিট , dfa5f53 কমিট , f743e8f কমিট , 72f936b কমিট , 5df0f11 কমিট , কমিট 07877f3 , 6025e89 প্রতিশ্রুতিবদ্ধ , প্রতিশ্রুতি 7b1a182 , 94db7e3 প্রতিশ্রুতিবদ্ধ ,কমিট ডিবি 12505 (07 ফেব্রুয়ারী 2020) ব্রায়ান মি। কার্লসন ( bk2204)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 5af345a , 17 ফেব্রুয়ারী 2020)

t5703: SHA-256 দিয়ে পরীক্ষার কাজ করুন make

সাইন-অফ-বাই: ব্রায়ান মি। কার্লসন

এই পরীক্ষায় একটি অবজেক্ট আইডি ব্যবহার করা হয়েছিল যা দৈর্ঘ্যে 40 হেক্স অক্ষর ছিল, যার ফলে পরীক্ষার উত্তরণ কেবল নয়, বরং হ্যাশ হয়ে যখন SHA-256 দিয়ে চালানো হয় hang

এই মানটি একটি নির্দিষ্ট ডামি অবজেক্ট আইডি test_oid_initএবং ব্যবহার করে পরিবর্তন করুন test_oid

তদতিরিক্ত, নিশ্চিত করুন যে আমরা স্থির দৈর্ঘ্যের পরিবর্তে ক্ষেত্রগুলি দিয়ে কাট ব্যবহার করে উপযুক্ত দৈর্ঘ্যের একটি অবজেক্ট আইডি বের করি।


কিছু কোডপথগুলিকে ভান্ডারটিতে কাজ করার জন্য প্যারামিটার হিসাবে একটি সংগ্রহস্থল উদাহরণ দেওয়া হয়েছিল, তবে the_repositoryএর কলিগুলিতে উদাহরণ দেওয়া হয়েছিল, যা গিট 2.26 (Q1 2020) দিয়ে পরিষ্কার করা হয়েছে (কিছুটা))

দেখুন b98d188 কমিট , 2dcde20 কমিট , 7ad5c44 কমিট , c8123e7 কমিট , 5ec9b8a কমিট , a651946 কমিট , eb999b3 কমিট (30 জানুয়ারী 2020) দ্বারা Matheus Tavares ( matheustavares)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে 78e67cd কমিট , 14 ফেব্রুয়ারী 2020)

sha1-file: check_object_signature()যে কোনও রেপো হ্যান্ডেল করার অনুমতি দিন

সাইন-অফ-বাই: ম্যাথিউস টাভারেস

কিছু কলার check_object_signature()ইচ্ছামত সংগ্রহস্থলগুলিতে কাজ করতে পারে তবে রেপো এই ফাংশনে পাস হয় না। পরিবর্তে, the_repositoryসর্বদা অভ্যন্তরীণভাবে ব্যবহৃত হয়।
সম্ভাব্য অসঙ্গতিগুলি ঠিক করতে, ফাংশনটিকে স্ট্রাক্ট সংগ্রহের অনুমতি দিন এবং সেই কলারগুলি হস্তান্তরিত হওয়া রেপোগুলিতে পাস করুন।

উপর ভিত্তি করে:

sha1-file: পাস git_hash_algoকরারhash_object_file()

সাইন-অফ-বাই: ম্যাথিউস টাভারেস

hash_object_file()একটি git_hash_algoপরামিতি প্রবর্তন করে সালিশী রেপোসে কাজ করার অনুমতি দিন । কলার পরিবর্তন করুন যার স্ট্র্যাপে স্ট্রাক্ট রেপোজিটরি পয়েন্টার রয়েছে git_hash_algoসেই রেপো থেকে পাস করার জন্য ।
অন্যান্য সমস্ত কলারের জন্য, পাস করুন the_hash_algo, যা ইতিমধ্যে অভ্যন্তরীণভাবে ব্যবহৃত হয়েছিল hash_object_file()
এই কার্যকারিতাটি নিম্নোক্ত প্যাচে ব্যবহৃত হবে check_object_signature()স্বেচ্ছাসেবীর রেপোগুলিতে কাজ করতে সক্ষম করার জন্য (যা পরিবর্তে, এখানে কোনও অসঙ্গতি ঠিক করতে ব্যবহৃত হবে object.c: পার্স_বজেক্ট ())।


4
এছাড়াও, ভুলে যাবেন না যে গিট v2.13.0 এবং পরবর্তীতে ডিফল্টরূপে শক্ততর SHA-1 প্রয়োগে চলে গেছে, যা SHAttered আক্রমণে ঝুঁকিপূর্ণ নয়। দেখুন stackoverflow.com/a/43355918/6309
VonC

1: গুগল উত্পাদিত সংঘর্ষের shattered.io ফ 2017 (আনুমানিক খরচ $ 110,000) 2: মধ্যে Nanyang প্রযুক্তগত বিশ্ববিদ্যালয় একটি সংঘর্ষের উত্পাদিত sha-mbles.github.io জানুয়ারি 2019 সালে (আনুমানিক খরচ $ 11k মধ্যে - $ 45k) এটা জন্য সময় SHA1
পেরিয়ে

@ ব্রিস্টউইব "গিটের SHA1 কে অতীত করার সময় এসেছে": আমি সম্মত, এবং গিট ২.২৫ (আজ মুক্তি পেয়েছে) এর সাথে, এই পদক্ষেপটি এগিয়ে গেছে। git rev-parseএখন কি হ্যাশ ব্যবহৃত হবে তা মুদ্রণ করতে সক্ষম: stackoverflow.com/a/58862319/6309 । : এবং খালি গাছ একটি নতুন SHA2 আইডি রয়েছে stackoverflow.com/a/9766506/6309
VonC

এই হ্যাশ আলগো এক্সটেনসিবিলিটি সহ, সিআরসি 32 শেষ পর্যন্ত আবার জ্বলতে পারে।
ওয়াল্ফ

52

আপডেট : উপরোক্ত প্রশ্ন এবং এই উত্তরটি ২০১৫ সালের then এর পর থেকে গুগল প্রথম SHA-1 সংঘর্ষের ঘোষণা দিয়েছে: https://security.googleblog.com/2017/02/annoucing-first-sha1-collision.html


স্পষ্টতই আমি বাইরে থেকে কেবল অনুমান করতে পারি যে গিট কেন SHA-1 ব্যবহার করে চলেছে, তবে এগুলির কারণগুলি হতে পারে:

  1. গিট ছিলেন লিনাস টরভাল্ডের সৃষ্টি এবং লিনাস স্পষ্টতই এসএইচএ -১ এর পরিবর্তে এই মুহুর্তে অন্য একটি হ্যাশিং অ্যালগরিদমের সাথে রাখতে চান না।
  2. তিনি দৃus়ভাবে দাবি করেছেন যে গিটের বিরুদ্ধে সফল এসএএএ -১-এর সংঘর্ষ-ভিত্তিক আক্রমণগুলি নিজেরাই সংঘর্ষগুলি অর্জন করার চেয়ে ভাল কাজ, এবং এইচএএ -১ এর তুলনায় দুর্বল, সম্পূর্ণরূপে ভাঙ্গা নয়, বিবেচনা করে এটি এটিকে যথেষ্ট দূরের করে তোলে অন্তত আজকে কার্যক্ষম আক্রমণ। তদুপরি, তিনি নোট করেছেন যে সংঘর্ষকারী বস্তু যদি বিদ্যমান উপস্থিতের তুলনায় পরে উপস্থিত হয় তবে "সফল" আক্রমণ খুব সামান্যই অর্জন করতে পারে, কারণ পরেরটিকে কেবল বৈধ হিসাবে একই হিসাবে ধরা হবে এবং উপেক্ষা করা হবে (যদিও অন্যরা উল্লেখ করেছেন যে বিপরীত ঘটতে পারে)।
  3. সফ্টওয়্যার পরিবর্তন করা সময় সাশ্রয়ী এবং ত্রুটি-প্রবণ বিশেষত যখন বিদ্যমান প্রোটোকলের চারপাশে বিদ্যমান অবকাঠামো এবং ডেটা থাকে যা মাইগ্রেশন করতে হবে। এমনকি যারা সফ্টওয়্যার এবং হার্ডওয়্যার পণ্যগুলি উত্পাদন করেন যেখানে ক্রিপ্টোগ্রাফিক সুরক্ষা ব্যবস্থাটির একমাত্র পয়েন্ট এটি এখনও SHA-1 এবং অন্যান্য দুর্বল অ্যালগরিদমগুলিতে স্থানান্তরিত হওয়ার প্রক্রিয়াতে রয়েছে। এই জায়গাগুলির সমস্ত হার্ডকোডযুক্ত unsigned char[20]বাফারগুলি কেবল কল্পনা করুন ;-), পরে এটি পুনরায় লেখার চেয়ে শুরুতে ক্রিপ্টোগ্রাফিক তত্পরতার জন্য প্রোগ্রাম করা অনেক সহজ।
  4. SHA-1 এর পারফরম্যান্স বিভিন্ন SHA-2 হ্যাশগুলির চেয়ে ভাল (সম্ভবত এখন কোনও চুক্তি-ব্রেকার হতে পারে না, তবে সম্ভবত 10 বছর আগে একটি স্টিকিং পয়েন্ট ছিল), এবং SHA-2 এর স্টোরেজ আকার আরও বড় ।

কিছু লিঙ্ক:

আমার ব্যক্তিগত দৃষ্টিভঙ্গিটি হ'ল সম্ভবত ব্যবহারিক আক্রমণগুলি সম্ভবত কিছুটা সময় বন্ধ ছিল এবং এমনকি যখন তারা ঘটে তখন লোকেরা প্রাথমিকভাবে তাদের বিরুদ্ধে হ্যাশ অ্যালগরিদম পরিবর্তন করার পরিবর্তে অন্য উপায়গুলি কমিয়ে দেবে, যদি আপনি সুরক্ষা সম্পর্কে যত্ন নেন তবে আপনাকে ভুল হওয়া উচিত আপনার অ্যালগরিদমগুলির পছন্দগুলি সম্পর্কে সতর্কতার সাথে এবং ক্রমাগত আপনার সুরক্ষা শক্তিগুলিকে উপরের দিকে সংশোধন করা, কারণ আক্রমণকারীদের সক্ষমতাও কেবল এক দিক দিয়ে চলেছে, সুতরাং গিটকে একটি ভূমিকা হিসাবে গ্রহণ করা বুদ্ধিমানের কাজ হবে, বিশেষত এর উদ্দেশ্য হিসাবে SHA-1 ব্যবহার করা ক্রিপ্টোগ্রাফিক সুরক্ষা হতে পারে না।


7
"আপনার কাছে এমন লোক থাকতে পারে যারা দূষিত হওয়ার চেষ্টা করে They তারা সফল হতে পারে না ̶ এটি নিখরচায় একটি ধারাবাহিকতা পরীক্ষা। " -লিনাস তোরাভাল্ডস
শক্তি

9
লোকেরা যে কোনও কিছু যাচাই করতে তাদের কোডে সুরক্ষিত স্বাক্ষর রাখার জন্য গিটের হ্যাশগুলি সুরক্ষিত হওয়া দরকার। এই স্বাক্ষরগুলি এই হ্যাশগুলির একটি বিশাল গাছে স্বাক্ষর করে। যদি সেই গাছের কয়েকটি শাখা সংঘর্ষিত হয়, স্বাক্ষরটি পাস করার সাথে সাথে দূষিত কোড .োকানো যায়। গিট এখন অবিশ্বাস্যভাবে ব্যাপকভাবে ব্যবহৃত হয়। একটি হ্যাশ আপগ্রেড প্রয়োজন।
fuzzyTew

"ছিন্নবিচ্ছিন্ন" এর আলোকে দুটি বিষয় বিবেচনা করুন: ১. SHA-1 ব্যবহার। - SHA-1 দুর্ঘটনাজনিত দুর্নীতির বিরুদ্ধে চেক করতে গৌরবময় চেকসাম হিসাবে ব্যবহৃত হয়। - এসএএএএ -1 এর সামগ্রীর ঠিকানাযোগ্য স্টোরের (যেমন: মহিমান্বিত ফাইল-নাম জেনারেটর) ভিতরে বস্তু নির্ধারণের জন্য (কিছুটা ছোট) হ্যান্ডি হেক্স নম্বর দেওয়ার জন্য জেনারেটর ফাংশন হিসাবে ব্যবহৃত হয়। - এটি স্বাক্ষরিত কমিট যা সুরক্ষার জন্য দায়ী (যেমন: পাবলিক-কী ক্রিপ্টোগ্রাফি siganture। না sha-1)
DrYak

2. সম্ভাব্যতা - অনেকগুলি জিপিইউ সময়ের পরে, গুগল একজোড়া ব্লক সিরিজ তৈরি করতে সক্ষম হয়েছে। - উভয় একই SHA-1 যোগফলের হ্যাশ (এটি সংঘর্ষ) - তারা সম্পূর্ণরূপে ধোঁয়াটে (এটি কেন আপনার প্রতিশ্রুতিটি মাঝখানে বাইনারি জাঙ্কের বিশালাকার ব্লক রয়েছে তা প্রমাণ করার জন্য কঠিন হতে পারে)। - ছিন্নভিন্ন ডেমোটি কোন র্যান্ডম বাইনারি জাঙ্কের উপস্থিতির উপর নির্ভর করে বিভিন্ন আচরণ উপস্থাপনের উপায় থাকার উপর নির্ভর করে। পিডিএফ দিয়ে এটি সম্ভব (যার পিছনে এম্বেড স্ক্রিপ্টিং ভাষা রয়েছে)) এটি সরল উত্সে আরও শক্ত হতে চলেছে (ভাবুন আন্ডারহ্যান্ডেড সি প্রতিযোগিতা)
ডাঃ ইয়াক

@ ড্রয়াক ২ এর জন্য: ধরে নেওয়া যাক যে আপনি ফটোশপের ডকুমেন্টগুলিতে একটি মন্তব্যের ক্ষেত্র সহ ট্র্যাক করছেন। বা মেটা ট্যাগ সহ অন্যান্য মিডিয়া ফাইল। এটি গেম ডেভলপমেন্টের একটি সাধারণ ঘটনা। তবে সাধারণত প্রতিটি পরিবর্তনে সেগুলি পরীক্ষা করা হবে না: প্রতিশ্রুতি বার্তাটি "আকারের জন্য অনুকূলিতকরণ" বললে মেটা ট্যাগটি কেন পরীক্ষা করবেন?
আর্নি Babenhauserheide

5

এটি মার্চুরিয়ালের জন্য SHA1 থেকে দূরে সরে যাওয়ার জরুরিতার আলোচনা, তবে এটি গিটের ক্ষেত্রেও প্রযোজ্য: https://www.mercurial-scm.org/wiki/mpm/SHA1

সংক্ষেপে: আপনি যদি আজ খুব চর্বিহীন হন না তবে আপনার কাছে sha1 এর চেয়েও খারাপ দুর্বলতা রয়েছে। তবে তা সত্ত্বেও, ম্যচুরিয়াল 10 বছর আগে শ 1 থেকে দূরে সরে যাওয়ার প্রস্তুতি নিতে শুরু করেছিলেন।

মার্চুরিয়াল এর ডেটা স্ট্রাকচার এবং এসএএএ 1 এর উত্তরসূরিদের প্রোটোকলগুলির পুনর্নির্মাণের কাজ বছরের পর বছর ধরে চলছে। 10 বছর পূর্বে রেভলগএনজি প্রবর্তনের সাথে মার্কুরিয়াল ০.৯-তে আমাদের রেগলগ কাঠামোতে বৃহত্তর হ্যাশগুলির জন্য স্টোরেজ স্পেস বরাদ্দ করা হয়েছিল। সম্প্রতি চালু হওয়া বান্ডেল 2 ফর্ম্যাটটি নেটওয়ার্কের মাধ্যমে বিভিন্ন হ্যাশ ধরণের বিনিময়কে সমর্থন করে। কেবলমাত্র অবশিষ্ট টুকরা হ'ল একটি প্রতিস্থাপন ফাংশন এবং পিছনের দিকে সামঞ্জস্য কৌশল বেছে নেওয়া।

যদি মুরচুরিয়াল করার আগে গিটটি sha1 থেকে দূরে সরে না যায়, আপনি এইচজি-গিটের সাথে স্থানীয় মার্চুরিয়াল আয়না রেখে সর্বদা সুরক্ষার আরেকটি স্তর যুক্ত করতে পারেন ।


3

একটি শক্তিশালী হ্যাশে এখন একটি রূপান্তর পরিকল্পনা রয়েছে , তাই ভবিষ্যতে দেখে মনে হচ্ছে এটি SHA-1 এর চেয়ে আরও আধুনিক হ্যাশ ব্যবহার করবে। থেকে বর্তমান রূপান্তরটি পরিকল্পনা :

কিছু হ্যাশ বিবেচনায় রয়েছে SHA-256, SHA-512/256, SHA-256x16, K12, এবং BLAKE2bp-256

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.