Измерение тока через шунтирующий резистор (Анализ мощности)

Я пытаюсь воспроизвести атаку анализа мощности побочного канала, описанную в этой статье: https://pdfs.semanticscholar. org/7946/a8ee82658e2ffb017270331f220a55f5ace6.pdf в образовательных целях.

Атака (на чипы семейства HCS3xx) требует измерения энергопотребления (т. е. тока), которое использует чип, чтобы раскрыть его криптографический ключ.

В документе они описывают свою установку как подключение шунтирующего резистора к цепи заземления и использование цифрового осциллографа (с частотой дискретизации более 1 МГц) для измерения падения напряжения на этом резисторе.

Я максимально воспроизвел эту настройку (изображено на схеме ниже), но проблема в том, что у меня нет осциллографа.

схема

Поэтому я решил использовать завалявшийся у меня Arduino Uno в качестве осциллографа бедняка.

Помимо того, что АЦП Arduino имеет намного более низкую частоту дискретизации (~77 кГц по сравнению с идеальными 20 МГц, описанными в статье), у меня возникла проблема с получением достоверных показаний напряжения на шунт.

При попытке использовать полный 10-битный АЦП и создании выборок как (ADCH << 8) | ADCL в моем ADC ISR я не получаю выборки, превышающие 0.

Однако, когда я выравниваю АЦП по левому краю, чтобы использовать только 8-битную точность (с ADMUX |= 1 << ADLAR и читаю только с помощью ADCH, Я получаю ненулевые значения, но ни одно значение больше единицы.

Может быть, количество энергии, потребляемой чипом, настолько мало, что Arduino не имеет достаточной точности для его считывания? Или, может быть, мой шунт имеет слишком большое сопротивление и вызывает пониженный ток во всей цепи?

, 👍1


1 ответ


Лучший ответ:

1

На графиках у них есть вершины 2,5 мА, поэтому у вас есть около 2 мВ на этом шунтирующем резисторе 1,2R.

А эталонное значение АЦП Uno по умолчанию составляет 5 В, разделенное на 1024 шага, каждый из которых составляет примерно 5 мВ. Это больше, чем пиковое значение измеренного напряжения.

При такой малой частоте выборки вы даже не сможете заметить быстрые изменения, так как будете измерять гораздо медленнее, чем нужно.

Точность шага АЦП может быть выше при использовании внутреннего эталона 1V1, но это все равно слишком большой шаг. И другого варианта на UNO нет. Mega, с другой стороны, также имеет возможность настроить дифференциальные входы АЦП с коэффициентом усиления 1x, 20x или 200x. Но это не поддерживается ядром Arduino, поэтому вам придется сделать это напрямую. Однако это не сильно поможет, если выборка выполняется слишком медленно.

,

О, я совершенно забыл посмотреть на ось Y на этом графике. Это очень полезно. Я полагал, что частота дискретизации будет слишком низкой, но подумал, что смогу отложить начало измерений и, по сути, чередовать несколько кривых мощности. Вероятно, это не сработало бы, учитывая смену счетчика., @genghiskhan