منذ لحظة إطلاقه، كانت هناك خطأ حسابي في خوارزمية تعدين البيتكوين، مما سمح باستخراج الكتل بسرعة عالية للغاية. وقد أخبر عن ذلك الباحث لوك مورييل.

كل 2016 كتلة (حوالي مرة كل أسبوعين) تعيد العقد حساب الهدف بحيث يظهر كتلة واحدة كل 10 دقائق، بغض النظر عن القوة الحسابية للعمال المناجم. لهذه التعديلات، تقوم العقد بقياس مدة الفترة الأخيرة، وتقارنها بالقيمة المستهدفة (2016 × 600 = 1 209 600 ثانية)، ثم تعدل الصعوبة وفقًا لذلك.

«تكمن في هذه الحسابات الأخطاء. ولقياس توقيت البلوكات في الفترة الماضية، تقارن العقدة الطابع الزمني لأول بلوك في الفترة مع الطابع الزمني لآخر بلوك. يبدو هذا منطقيًا بديهيًا، لكنه في الواقع خطأ، لأن بين أول وآخر بلوك في الفترة لا يوجد سوى 2015 فاصلًا، وليس 2016»، — أوضح موريل. 

إذا عرّفنا t0 على أنه الطابع الزمني لأول بلوك، وt2015 على أنه الطابع الزمني لآخر بلوك، فإن العقدة تحسب الزمن المنقضي على النحو التالي: T = t2015 — t0. وبهذا نحصل على 2015 فاصلًا (من t0 إلى t1 > من t1 إلى t2 > … > من t2014 إلى t2015). 

للحصول على 2016 فاصلًا، يجب استخدام صيغة أخرى: T = t2015 — t-1، حيث t-1 هو الطابع الزمني لآخر بلوك في الفترة السابقة. 

يُسمّى ذلك «خطأ الإزاحة بوحدة واحدة». يُدخل هذا الخلل انحرافًا يقارب ‎0,05%‎ باتجاه زيادة طفيفة في تعقيد الخوارزمية. 

لكن المشكلة الحقيقية تكمن في شيء آخر. يترتب على هذا النقص أن فترات الضبط لا تتداخل — ولا يتم احتساب الطابع الزمني لآخر بلوك في فترة ما عند حساب الفترة التالية.

التلاعب بالوقت

يجعل هذا الفارق الهجومَ باستخدام «تشويه الوقت» ممكنًا. وتتمثل فكرته فيما يلي:

https://forklog.com/news/v-mehanizme-majninga-bitkoina-obnaruzhili-oshibku-nulevogo-dnya/#origin=https%3A%2F%2Fwww.google.com%2F&cap=swipe,education&webview=1&dialog=1&viewport=natural&visibilityState=prerender&prerenderSize=1&viewerUrl=https%3A%2F%2Fwww.google.com%2Famp%2Fs%2Fforklog-com.cdn.ampproject.org%2Fc%2Fs%2Fforklog.com%2Fnews%2Fv-mehanizme-majninga-bitkoina-obnaruzhili-oshibku-nulevogo-dnya%3Fusqp=mq331AQIUAKwASCAAgM%25253D&amp_kit=1$BTC $BTC #US-IranTalksFailToReachAgreement $