Фильтрация шума данных акселерометра

Есть пара моментов, которые здесь не рассматриваются, и я чувствую, что это из-за недостатка понимания того, что такое хеш, как он работает и сколько времени требуется, чтобы успешно атаковать их, используя радугу или любой другой метод. в настоящее время известно человеку ...

Математически говоря, MD5 не «сломан», если вы солите попытки хэша и дросселирования (даже на 1 секунду), ваша безопасность будет так же «сломана», как если бы злоумышленник медленно отбрасывал вашу 1-футовую твердую сталь. стена с деревянной ложкой:

Это займет тысячи лет, и к тому времени все участники будут мертвы; есть более важные вещи, о которых нужно беспокоиться.

Если вы заблокируете их аккаунт к 20-й попытке ... проблема решена. 20 ударов на твоей стене = 0.0000000001% вероятности, что они пройдут. Есть буквально лучший статистический шанс, что вы на самом деле Иисус.

You're thinking about it wrong.

Также важно отметить, что абсолютно любая хеш-функция будет уязвима для коллизий в силу того, что хеш-функция: ) уникальный идентификатор чего-то еще ".

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

Давайте проведем небольшой мысленный эксперимент ...

SHA-2, если бы он существовал, имел бы 4 возможных уникальных идентификатора для чего-то еще ... 00, 01, 10 & amp; 11. Очевидно, это приведет к столкновениям. Вы видите проблему здесь? Хеш - это просто сгенерированный идентификатор того, что вы пытаетесь идентифицировать.

MD5 на самом деле действительно очень хорош при случайном выборе числа на основе входных данных. SHA на самом деле не намного лучше; У SHA просто больше места для идентификаторов.

Используемый метод составляет около 0,1% причины, по которой столкновения менее вероятны. Настоящая причина - большее битовое пространство.

Это буквально единственная причина, по которой SHA-256 и SHA-512 менее уязвимы для столкновений; потому что они используют большее пространство для уникального идентификатора.

Фактические методы SHA-256 и SHA-512, используемые для генерации хеша, на самом деле лучше, но ненамного; те же самые радужные атаки сработали бы над ними, если бы у них было меньше битов в их идентификаторах, а файлы и даже пароли могут иметь идентичные идентификаторы, используя SHA-256 и SHA-512, это просто намного менее вероятно, потому что он использует больше битов.

НАСТОЯЩАЯ ПРОБЛЕМА - это как вы реализуете свою безопасность

Если вы позволите автоматическим атакам достигать вашей конечной точки аутентификации 1000 раз в секунду, вы попадете в нее. Если вы дросселируете до 1 попытки за 3 секунды и блокируете учетную запись на 24 часа после 10-й попытки, это не так.

Если вы храните пароли без соли (соль - это просто дополнительный секрет для генератора, затрудняющий идентификацию плохих паролей, таких как «31337» или «пароль») и у вас много пользователей, вы собираетесь получить взломан Если вы солите их, даже если вы используете MD5, это не так.

Учитывая, что MD5 использует 128 бит (32 байта в HEX, 16 байтов в двоичном), а SHA 512 занимает только 4-кратное пространство, но практически исключает коэффициент коллизий, предоставляя вам 2 ^ 384 возможных идентификатора ... Идите с SHA- 512, каждый раз.

Но если вы беспокоитесь о том, что на самом деле произойдет, если вы используете MD5, и вы не понимаете реальных, реальных различий, вы все равно, вероятно, будете взломаны, имеет смысл?

23
задан Faiz 28 October 2009 в 17:39
поделиться

3 ответа

Примеры из Apple SDK на самом деле реализуют фильтрацию еще более простым способом, используя линейное изменение:

//ramp-speed - play with this value until satisfied
const float kFilteringFactor = 0.1f;

//last result storage - keep definition outside of this function, eg. in wrapping object
float accel[3]; 

//acceleration.x,.y,.z is the input from the sensor

//result.x,.y,.z is the filtered result

//high-pass filter to eliminate gravity
accel[0] = acceleration.x * kFilteringFactor + accel[0] * (1.0f - kFilteringFactor);
accel[1] = acceleration.y * kFilteringFactor + accel[1] * (1.0f - kFilteringFactor);
accel[2] = acceleration.z * kFilteringFactor + accel[2] * (1.0f - kFilteringFactor);
result.x = acceleration.x - accel[0];
result.y = acceleration.y - accel[1];
result.z = acceleration.z - accel[2];
25
ответ дан 29 November 2019 в 02:01
поделиться

ИМО, разработка фильтра Калмана в качестве вашей первой попытки чрезмерно усложняет, вероятно, довольно простую проблему. Я бы начал с простого FIR-фильтра и попробовал бы что-то более сложное, только когда / если вы его протестировали и с достаточной уверенностью обнаружили, что он не может предоставить то, что вы хотите. Однако я предполагаю, что он сможет делать все, что вам нужно, и делать это намного проще и эффективнее.

0
ответ дан 29 November 2019 в 02:01
поделиться

I seem to remember this being done in Apple's sample code for the iPhone. Let's see...

Look for AccelerometerFilter.h / .m on Google (or grab Apple's AccelerometerGraph sample) and this link: http://en.wikipedia.org/wiki/High-pass_filter (that's what Apple's code is based on).

There is some pseudo-code in the Wiki, too. But the math is fairly simple to translate to code.

1
ответ дан 29 November 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: