Flame Steel Battle Axe

Today I announce game scene editor for Flame Steel Game Toolkit – Flame Steel Battle Axe.

This editor will allow you to edit/save/load flame steel game toolkit game scene. Because it’s boring to write code for every scene, and I want to have some serialized scene file format.
I chose Kotlin (JVM) language for implementing this editor.

You can check progress here:
https://github.com/demensdeum/FlameSteelBattleAxe

Flame Steel Core

Ok, here is Death Mask game last version screenshot:

Looks like 1ml dollars franchise isn’t it?

Flame Steel Engine Changes

Flame Steel Engine renamed to Flame Steel Core, Game Toolkit split into SDL, Panda3D (Desktop) and ThreeJS (Web) based libraries. So if you have courage to compile some project with Flame Steel glorious technology, then you need to compile all necessary libraries first.

Github Repositories:

https://github.com/demensdeum/Death-Mask
https://github.com/demensdeum/FlameSteelCore
https://github.com/demensdeum/FlameSteelEngineGameToolkit
https://github.com/demensdeum/FlameSteelEngineGameToolkitDesktop

Outdated:

https://github.com/demensdeum/FlameSteelEngineGameToolkitSDL
https://github.com/demensdeum/FlameSteelEngineGameToolkitWeb

Quantum RSA Break

[Translation may be, some day]

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

Не все так страшно

На самом деле на первом этапе создания ключей мы берем два случайных числа, но числа должны делиться только на себя и единицу – простые числа.
Назовем их p и q. Далее мы должны получить число n = p *q. Оно будет использоваться для дальнейшей генерации ключей, ключи в свою очередь будут использоваться для шифрования, дешифровки сообщений. В итоговом варианте приватного и публичного ключа число n будет передано без изменений.
Допустим у нас на руках один из ключей RSA и зашифрованное сообщение. Вытаскиваем из ключа число n и начинаем его хакать.

Факторизуем n

Факторизация – разложение числа на простые множители. Сначала вытаскиваем из ключа число n (на настоящих ключах можно сделать с помощью openssl), допустим n = 35. Тогда раскладываем на простые множители n = 35 = 5 * 7, это и есть наши p и q. Теперь можно перегенерить ключи с помощью полученных p, q, дешифровать сообщение и шифровать обеспечивая видимость оригинального автора.

С кубитами не все так просто

Неужели можно поломать любой RSA так просто? На самом деле нет, числа p, q берут заведомо большими, чтобы задача факторизации на классических компьютерах заняла очень продолжительное время (10 лет в какой-то там степени)
Однако, используя квантовый алгоритм Шора, факторизовать число можно за очень малое время. На данный момент в статьях на эту тему заявлено время перемножения данного числа, тоесть фактически моментально. Для работы алгоритма Шора необходимо реализовать квантовые компьютеры, с большим количеством кубит. В 2001 году IBM разложили на простые множители число 15 с помощью 7 кубит. Так что этого момента придется ждать еще долго, к тому времени мы перейдем на пост-квантовые алгоритмы шифрования.

Потрогать Шора

Питер Шор рассказывает про свой алгоритм факторизации

Чтобы опробовать алгоритм Шора на квантовом симуляторе, вы можете установить ProjectQ, в его примеры входит реализация shor.py, позволяющая факторизовать число вводимое пользователем. На симуляторе время выполнения удручает, но вроде весело и задорно симулирует работу квантового компьютера.

Статьи:
http://www.pagedon.com/rsa-explained-simply/my_programming/
http://southernpacificreview.com/2014/01/06/rsa-key-generation-example/
https://0day.work/how-i-recovered-your-private-key-or-why-small-keys-are-bad/

Реализация RSA на Python:
https://github.com/demensdeum/RSA-Python

Russian Quantum Hack and Number Generator

[Translation may be, some day]

Эта заметка увеличит длину вашего резюме на 5 см!

Без лишних слов о крутости квантовых компьютеров и всего такого, сегодня я покажу как сделать генератор чисел на реальном квантовом процессоре IBM.
Для этого мы будем использовать всего один кубит, фреймворк для разработки квантового ПО для python – ProjectQ, и 16 кубитовый процессор от IBM, онлайн доступ к которому открыт любому желающему по программе IBM Quantum Experience.

Установка ProjectQ

Для начала у вас должен быть Linux, Python и pip. Какие либо инструкции по установке этих базовых вещей приводить бесполезно, т.к. в любом случае инструкции устареют через неделю, поэтому просто найдите гайд по установке на официальном сайте. Далее устанавливаем ProjectQ, гайд по установке приведен в документации. На данный момент все свелось к установке пакета ProjectQ через pip, одной командой: python -m pip install –user projectq

Ставим кубит в суперпозицию

Создаем файл quantumNumberGenerator.py и берем пример генератора бинарного числа из документации ProjectQ, просто добавляем в него цикл на 32 шага, собираем бинарную строку и переводим в 32-битное число:

import projectq.setups.ibm
from projectq.ops import H, Measure
from projectq import MainEngine
from projectq.backends import IBMBackend

binaryString = ""

eng = MainEngine()

for i in range(1, 33):

 qubit = eng.allocate_qubit()

 H | qubit

 Measure | qubit

 eng.flush()

 binaryString = binaryString + str(int(qubit))

 print("Step " + str(i))

number = int(binaryString, 2)

print("\n--- Quantum 32-Bit Number Generator by demensdeum@gmail.com (2017) ---\n")
print("Binary: " + binaryString)
print("Number: " + str(number))
print("\n---")

Запускаем и получаем число из квантового симулятора с помощью команды python quantumNumberGenerator.py

Незнаю как вы, но я получил вывод и число 3974719468:

--- Quantum 32-Bit Number Generator by demensdeum@gmail.com (2017) ---

Binary: 11101100111010010110011111101100
Number: 3974719468

---

Хорошо, теперь мы запустим наш генератор на реальном квантовом процессоре IBM.

Хакаем IBM

Проходим регистрацию на сайте IBM Quantum Experience, подтверждаем email, в итоге должен остаться email и пароль для доступа.
Далее включаем айбиэмовский движок, меняем строку eng = MainEngine() -> eng = MainEngine(IBMBackend())
В теории после этого вы запускаете код снова и теперь он работает на реальном квантовом процессоре, используя один кубит. Однако после запуска вам придется 32 раза набрать свой email и пароль при каждой аллокации реального кубита. Обойти это можно прописав свой email и пароль прямо в библиотеки ProjectQ.

Заходим в папку где лежит фреймворк ProjectQ, ищем файл с помощью grep по строке IBM QE user (e-mail).
В итоге я исправил строки в файле projectq/backends/_ibm/_ibm_http_client.py:

email = input_fun('IBM QE user (e-mail) > ') -> email = "quantumPsycho@aport.ru"

password = getpass.getpass(prompt='IBM QE password > ') -> password = "ilovequbitsandicannotlie"

Напишите свой email и password со-но.

После этого IBM будет отправлять результаты работы с кубитом онлайн прямо в ваш скрипт, процесс генерации занимает около 20 секунд.

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

Статья на похожую тему:
Introducing the world’s first game for a quantum computer

Красивые и пустые

[English translation, may be some day]

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

Вот так я себя чувствую когда играю в любую игру от Blizzard. Я вижу много людей которые не могут играть в игры старой школы, не могут играть во что-то действительно оригинальное, не шаблонное (Deadly Premonition или Papers Please) зато все любят игры Blizzard.

Знакомство с их играми на PC я начал со Starcraft. После диких и аркадных Command & Conquer, геймплей мне показался очень размеренным, успокаивающим. Ограничение на количество юнитов, копание в микро-нано операциях меня лично очень усыпляют. Дальше была красивая, но пустая кликер игра – Diablo 2. Хорошая графика, генерируемые уровни, и ноль геймплея, абсолютно медитативное и пустое времяпрепровождение. Однако мои друзья крепко засели в старкрафте и диабле. В начале нулевых вышел крышесносный Warcraft 3. Одиночная компания мне тогда очень понравилась. Однако мультиплеер очень похож на Starcraft и потому очень уныл. Далее был не менее красивый, пустой Starcraft 2. Некоторое время я играл в f2p Hearthstone – эта игра похожа на игральный автомат, первое время ты выигрываешь, появляется вера в себя, но потом к тебе приходят разработчики с предложение купить несколько колод по цене 500 ₽. Твой скилл ничего не зарешает, решает только количество денег потраченных на виртуальные колоды.

Недавно я купил Overwatch, шутер от Blizzard. Мне понравилась героиня Mei, артом, косплеем на которую засыпаны все соцсети, в итоге общая волна рекламы в гик сообществах выбросила меня на берег игроков Overwatch.

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

Единственная игра Blizzard которая мне по настоящему понравилась – Rock’n’Roll Racing. Там действительно есть геймплей, но у меня подозрение что в этом заслуга не разработчика, а издателя – Interplay, скорее всего Interplay помогли Blizzard сделать из игры что-то по настоящему играбельное.