Квантовые вычисления и повреждение шифрования

Возможно, проблема связана с тем, что в ваш файл не добавляются новые строки. Простое исправление было бы следующим: f.write(str(meals) + "\n")

Но писать код в текстовом файле и затем оценивать его - плохая идея:

  • Файл будет доступен для чтения только вашей программе на Python
  • Это подвержено синтаксическим ошибкам (как в вашем вопросе)
  • Это очень небезопасно. Вредоносный код может оказаться в вашем файле.

Пока вы храните только текст, числа и true / false в своем словаре, он может быть очень четко представлен в файле JSON. Преимущество JSON в том, что он может быть прочитан практически любым языком программирования:

import json

data = {
    "A": 1,
    "B": {"C": 2}
}

# write data to file
with open("file.txt", "w") as file:
    file.write(json.dumps(data))

# read data from file
with open("file.txt", "r") as file:
    data = json.load(file)

Если вы храните более сложные объекты в вашем файле, например, экземпляры классов и т. Д., То вам следует рассмотреть pickle. Это еще одна встроенная библиотека и очень удобный способ хранения практически всего из вашей программы на Python. Как отметил Клаус Д. в комментарии, рассол не безопаснее, чем ваш подход. Вы никогда не должны загружать объект рассола из источника, которому вы не доверяете.

import pickle

with open("file.txt", "wb") as file:
    pickle.dump(data, file)

with open("file.txt", "rb") as file:
    data = pickle.load(file)
26
задан Will Vousden 1 May 2015 в 13:08
поделиться

8 ответов

Преамбула: Квантовые компьютеры - странные звери, которых мы еще не приручили до конца. Теория, лежащая в их основе, абстрактна и математична, поэтому любое обсуждение того, как они могут быть более эффективными, чем классические компьютеры, неизбежно будет долгим и сложным. Чтобы понять детали, вам потребуется, по крайней мере, начальное понимание линейной алгебры и квантовой механики, но я постараюсь передать свое ограниченное понимание!


Основной предпосылкой квантовых вычислений является квантовая суперпозиция. Идея заключается в том, что квантовая система (такая как квантовый бит, или кубит, квантовый аналог обычного бита) может, как вы говорите, существовать не только в состояниях 0 и 1 (называемых вычислительными базисными состояниями системы), но и в любой их комбинации (так что каждое из них имеет амплитуду, связанную с ним). Когда за системой кто-то наблюдает, состояние кубита коллапсирует в одно из его базисных состояний (возможно, вы слышали о коте Шредингера, который связан с этим).

Из-за этого регистр из n кубитов имеет 2^n собственных базисных состояний (это состояния, в которых вы можете наблюдать регистр; представьте себе классическое n-битное целое число). Поскольку регистр может существовать в суперпозиции всех этих состояний одновременно, можно применять вычисления ко всем 2^n состояниям регистра, а не только к одному из них. Это называется квантовым параллелизмом.

Из-за этого свойства квантовых компьютеров может показаться, что они являются серебряной пулей, которая может решить любую проблему экспоненциально быстрее, чем классический компьютер. Но все не так просто: проблема в том, что как только вы наблюдаете результат вычислений, он распадается (как я уже говорил выше) на результат только одного из вычислений - и вы теряете все остальные.

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

Пример, о котором вы спрашиваете, - это квантовый криптоанализ. Считается, что квантовые компьютеры могут "взломать" некоторые алгоритмы шифрования: в частности, алгоритм RSA, который основан на сложности нахождения простых коэффициентов очень больших целых чисел. Алгоритм, который позволяет это сделать, называется алгоритм Шора, который может находить коэффициенты целых чисел с полиномиальной временной сложностью. Напротив, лучший классический алгоритм для этой проблемы имеет (почти) экспоненциальную временную сложность, и поэтому проблема считается "неразрешимой".

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


Aside: чтобы лучше понять идею квантовой суперпозиции, думайте в терминах вероятности. Представьте, что вы бросаете монету и ловите ее на руку, прикрытую так, что вы не можете ее видеть. В качестве очень слабой аналогии, монету можно представить как находящуюся в суперпозиции состояний "голова" и "решка": каждое из них имеет вероятность 0,5 (и, естественно, поскольку существует два состояния, эти вероятности складываются в 1). Когда вы убираете руку и наблюдаете за монетой непосредственно, она падает либо в состояние "голова", либо в состояние "решка", и таким образом вероятность этого состояния становится равной 1, а другого - 0. Полагаю, можно представить себе это как набор весов, которые уравновешены до момента наблюдения, когда они склоняются на одну сторону по мере того, как наши знания о системе увеличиваются и одно состояние становится "настоящим".

Конечно, мы не думаем о монете как о квантовой системе: для всех практических целей монета имеет определенное состояние, даже если мы не можем его увидеть. Однако для настоящих квантовых систем (таких как отдельная частица, запертая в ящике) мы не можем думать об этом таким образом. Согласно обычной интерпретации квантовой механики, частица в принципе не имеет определенного положения, а существует во всех возможных положениях одновременно. Только при наблюдении ее положение ограничивается в пространстве (хотя и в ограниченной степени; ср. принцип неопределенности), и даже это положение является чисто случайным и определяется только вероятностью.

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

52
ответ дан 28 November 2019 в 06:44
поделиться

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

На квантовом уровне законы, управляющие поведением, отличаются от макроуровня.

Чтобы ответить на ваш вопрос, сначала нужно понять, как работает шифрование.

На базовом уровне шифрование является результатом умножения двух чрезвычайно больших простых чисел вместе. Этот сверхбольший результат делится на 1 сам по себе и на эти два простых числа.

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

Эта атака медленная, и ей мешают, выбирая все большие и большие простые числа. Вы слышите о размерах ключа 40 бит, 56 бит, 128 бит, а теперь 256,512 бит и выше. Эти размеры соответствуют размеру числа.

Алгоритм грубой силы (в упрощенном виде) может выглядеть как

for(int i = 3; i < int64.max; i++)
{
  if( key / i is integral)
  {
    //we have a prime factor
  }
}

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

Как квантовый битовый адрес это то, что они оба равны 0 и 1 одновременно. Скажем, у вас есть 3 квантовых бита (не малый подвиг, заметьте).

С 3 кубитами ваша программа может принимать значения 0-7 одновременно

(000,001,010,011 и т. Д.)

, включая простые числа 3,5,7 в то же время.

, поэтому, используя простой алгоритм, приведенный выше, вместо увеличения i на 1 каждый раз, вы можете просто разделить один раз и проверить

0,1,2,3,4,5,6, 7

все одновременно.

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

3
ответ дан Alan 28 November 2019 в 06:44
поделиться

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

Однако это «ограничения скорости», а именно то, что называется вычислительной сложностью. Это в терминах непрофессионала означает, что для данного алгоритма вы знаете, что время, необходимое для запуска алгоритма (и пространство памяти, необходимое для запуска алгоритм) имеет минимальную оценку. Например, алгоритм O (n ^ 2) означает, что для размера данных n потребуется n ^ 2 времени для запуска.

Однако этот вид выходит из окна, когда у нас есть кубиты (квантовые биты), когда вы выполняете операции над кубитами, которые могут иметь «промежуточные» значения. Алгоритмы, которые будут иметь очень высокую вычислительную сложность (такие как факторинг огромных чисел, ключ к взлому многих алгоритмов шифрования), могут быть выполнены с гораздо меньшей вычислительной сложностью. Это причина того, что квантовые вычисления смогут взламывать зашифрованные потоки на порядки быстрее, чем обычные компьютеры.

0
ответ дан Joshua Ritterman 28 November 2019 в 06:44
поделиться

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

1
ответ дан mikerobi 28 November 2019 в 06:44
поделиться

квантовые компьютеры и т. Д. Все ложь. Я не верю этим научно-фантастическим журналам. на самом деле система rsa основана на двух простых числах и их умножении. p1, p2 - огромные простые числа p1xp2 = N модуль. Система rsa подобна тому, что выбирают простое число. Может быть маленьким его открытый ключ E (p1-1) * (p2-1) = R найти число D, которое делает E * D = 1 mod (R), которым мы делимся (E , N) данные как открытый ключ, публично мы надежно сохраняем (D, N) как частный.

Для решения этой системы взломщика системы Rsa необходимо найти простые множители N. * масса Вселенной ближе к 10 ^ 53 кг * масса электрона составляет 9,10938291 × 10 ^ -31 килограмм, если мы разделим вселенную на электроны, мы сможем создать 10 ^ 84 электронов. электроны имеют более медленные скорости, чем свет. частота его движения может составлять 10 ^ 26 , если кто-нибудь производит параллельные по размеру электрона rsa искатели простых факторов из всей массы вселенной. вся вселенная может обрабатывать (10 ^ 84) * (10 ^ 26) = 10 ^ 110 чисел в секунду.

rsa имеет лимиты битов альтернативных простых чисел. может быть, 4096 бит 4096 бит RSA имеет 10 ^ 600 возможных простых чисел для грубой силы. так что ваш квантовый решатель Вселенной должен сделать тесты в течение 10 500 лет.

rsa vs Вселенная массовый квантовый компьютер 1 - 0

может быть, квантовый компьютер может взломать пароли 64/128 бит. потому что 128-битный пароль имеет 10 ^ 39 возможных узлов перебора.

0
ответ дан phpkadir 28 November 2019 в 06:44
поделиться

Почти все наши шифрования с открытым ключом (например, RSA) основаны исключительно на математике, полагаясь на сложность факторизации или дискретный логарифм . Оба из них будут эффективно взломаны с использованием квантовых компьютеров (хотя даже после получения степени бакалавра по CS и математике и после нескольких занятий по квантовой механике я все еще не понимаю алгоритм).

Однако алгоритмы хеширования (например, SHA2) и шифрования с симметричным ключом (например, AES) , которые в основном основаны на диффузии и путанице , , по-прежнему безопасны.

1
ответ дан 28 November 2019 в 06:44
поделиться

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

Во-вторых, прочтите статью в википедии: http://en.wikipedia.org/wiki/Quantum_computer

В частности, «В общем, квантовый компьютер с n кубитами может находиться в произвольной суперпозиции до 2 ^ n разных состояний одновременно (это сравнимо с обычным компьютером, который может находиться только в одном из этих 2 ^ n состояний одновременно) »

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

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

Если такое возможно, это может стать концом криптографии в том виде, в каком мы ее знаем.

0
ответ дан 28 November 2019 в 06:44
поделиться

Статья Википедии очень хорошо объясняет это.

Короче говоря, если у вас есть N бит, ваш квантовый компьютер может находиться в 2 ^ N состояниях одновременно . Концептуально похоже на обработку 2 ^ N CPU с традиционными битами (хотя и не совсем то же самое).

2
ответ дан 28 November 2019 в 06:44
поделиться