В общем, чтобы нам разгадать секрет генерирования числа K, нам надо понять, что же за байты они берут по модулю N. 
Формула: k = x mod N. 
где k и N  - числа длиной в 20 байт, 
x - некоторое число длиной в 40 байт. 
 
Число N нам известно, это порядок используемой эллиптической кривой. Оно есть в параметрах кривых. 
 
UPD: 
Что мы имеем: 
1) число k было постоянным для сигнатур с криптофейлами в пределах одного ключсета (разные ключи и одинаковые N дают разные k). 
2) если изменять число x в пределах числа N, то число k будет меняться на разницу (x_второе - x_первое). 
3) для всех сигнатур в .pkg файлах были одинаковые RS, при одинаковых hash от подписываемых данных. 
То есть число k оставалось неизменным при неизменном хеше от подписываемых данных. 
 
UPD2: 
Надо вот что попробовать: 
если для .pkg / .edat файлов число k "подсаливают", а соль вполне себе может быть равной sha1 хешу от данных, для некоторых случаев, будет справедливо уравнение: 
(k_первое - k_второе) = (h_первое - h_второе) 
где k_первое, k_второе - секретные числа первой сигнатуры и второй сигнатуры , 
h_первое, h_второе  - хеши sha1 от подписываемых данных для первой и второй сигнатуры соответственно. 
а т.к хеши - числа известные, то можно попробовать выразить k_второе через k_первое методом подстановки. 
k1 - k2 = h1 - h2 
k2 = k1 + (h2 - h1) 
и попробовать использовать это для подсчёта прив ключа dA для edat и pkg. 
Если облом: можно еще попробовать использовать не весь хеш, а только последние его 8 байт. 
	 
		
		
		
		
		
	 
		
		
						 
  
				
				Последний раз редактировалось Fireball; 08.05.2018 в 08:58.
				
				
			
		
		 
	 |