ホーム ニュース 『サイレントヒル2』のスピードラン配信において、ランダムな謎解きの答えを確実に予言する謎の視聴者が存在した。かつて走者達を混乱させた「魔術師」の技術 全記事ニュース
RNG。もともとはRandom Number Generator、つまりは乱数を発生させる仕組みそのものを指していたこの略語は、転じてゲーマーにとっては「運要素」そのものを指す言葉となっている。RNGはスピードランナー達にとって最大の敵でもある。そして「いかにして自分の走るルートからRNGを排除するか」に心血を注ぐスピードランナー達、その一人が『ゼルダ』シリーズの走者として知られるLinkus7氏である。彼が今回RNGの魔の手から解放したタイトルは『ゼルダの伝説 風のタクト』(以下、『風のタクト』)、特にそのゲーム中に登場する「海戦ゲーム」だ。Linkus7氏はその戦いの軌跡を解説動画としてアップロードし、大きな反響を呼んだ。本記事では「我々がいかにしてゼルダシリーズ最悪のミニゲームに決着をつけたか」というタイトルのその動画の内容の、日本語での解説を試みる。なお解析が成功されたのは2020
SSHの鍵生成には暗号論的に安全な疑似乱数を使おうという話。 暗号論的に安全ではない疑似乱数がどれだけ危険かというのを、簡単なCTFを解くことで検証してみました。 背景 SSH公開鍵に自分の好きな文字列を入れる、という記事を読みました。 かっこいいSSH鍵が欲しい 例えばこのSSH公開鍵、末尾に私の名前(akiym)が入っています。 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFC90x6FIu8iKzJzvGOYOn2WIrCPTbUYOE+eGi/akiym そんなかっこいいssh鍵が欲しいと思いませんか? かっこいい!真似してみたい! そこまではいいんですが、問題は実装です。 秘密鍵を生成する際の乱数生成には高速化のために Goのmath/randを使っていますが、乱数が用いられるのは公開しない秘密鍵自体であり、このアルゴリズム自体はLagged Fib
プログラミングをやっていると、様々な乱数に出会います。乱数に関しては大勢の研究者が色々な研究結果を出しているため、種類も増え、いったいどれを使えばいいのかと悩む原因にもなります。 大勢が研究し利用している分野ですから、私以外でも大勢が乱数に関する記事を書いているため、あえて新しい記事を書く価値は高くないかもしれません。まあ、既に理解している人はここで記事を閉じるか、暇つぶし程度の感覚で読んでいただくと良いかと思います。 真乱数と疑似乱数 プログラミングの世界の中でいわゆる "乱数" として扱われることが多いのは擬似乱数です。疑似、と付くからには、これは実のところ乱数ではないと言えます。とは言え、擬似乱数を乱数でないと言ってしまうと話が終わってしまうので、疑似乱数を含む乱数を広義の乱数とします。この記事で扱うのは広義の乱数です。逆に、狭義の乱数、本物の乱数は真乱数と言います。 本物と言いまし
こんにちは、BASEのフロントエンドチームでエンジニアリングマネージャーをやっている松原(@simezi9)です。 私は最近ではマネージャーとしてコードを書くことよりもチームの編成や採用などをメインに業務を行っているのですが、 そんな中でチラっと書いたコードで見事に落とし穴にハマって失敗をしたのでその共有記事です まえがき BASEのフロントエンドチームは現在15名ほど(うち業務委託5名)で運営されています。 この人数は今後もどんどん増えていく予定なのですが、目下全社的にリモートワークになっている事情も手伝ってメンバー同士の関係性が希薄になってしまう懸念を持っていました。 BASEの中では常に複数のプロジェクトが走っているのですが、それぞれのプロジェクトにフロントエンドエンジニアは2〜3名ずつ配置されています。 そんななかでアサインされた人同士がフロントエンドエンジニア同士であるにも関わら
データの暗号化やプログラミングでも使用される乱数は、定量的なアルゴリズムを用いて生成する擬似乱数や、CPUや通信機器のノイズを用いて生成する物理乱数がありますが、いくつかの乱数の中でも最も信頼性が高いとされる量子乱数を、放射性物質を用いて生成してしまう猛者がGitHub上に現れ、乱数作成機器の仕様とソースコードを公開しています。 GitHub - nategri/chernobyl_dice: A quantum random number generator with a Cold War aesthetic. https://github.com/nategri/chernobyl_dice 「Chernobyl Dice(チェルノブイリのサイコロ)」は、エントロピー源として弱放射性物質の核分裂反応を利用した量子乱数生成器です。Chernobyl Diceは基板となるArduino N
2022-07-19 これらの問題を解決する Random Extension 5.x 並びに Random Extension Improvement RFC が可決され、 master に merge されました。 PHP 8.2 より利用可能になります。 https://wiki.php.net/rfc/rng_extension https://wiki.php.net/rfc/random_extension_improvement https://github.com/php/php-src/commit/4d8dd8d258ff365b146bcadcb277ede8992706d0 2022-06-18 これらの問題を解決するため、 PHP 8.2 に対して Random Extension 5.x の RFC が作成され、投票が始まっています 2021-01-15 PHP
世の中には、全てのパターンを網羅的に調べることができないほど複雑な事象がある。 その一部の要素に乱数を用いて網羅性の代替とすることを、人類は「シミュレーション」という科学っぽい名称で呼んだ。 しかし、乱数を用いるシミュレーション(モンテカルロ・シミュレーション)は、科学を途中過程に置いた信仰だと思う。 乱数を用いた時点で、結果がそれこそ神のみぞ知る厳密解に合致しているのか、多くの場合わからない。 そもそも、その合致を数式的に証明できるのであれば、シミュレーションなんか必要ないわけで。 それは、大規模シミュレーションとか呼ばれるものなんかで特にそうだろう。 大規模となれば、計算には莫大な時間と費用がかかる。 なので、乱数の使用数に比して、統計的信頼度を満たすほどの回数で試行するのは困難であろう。 そうなると、厳密解への合致はそのシミュレーションへの信頼感といった信仰によってしか期待できない。
κeenです。こちらのスライドが話題になっているようです。 10秒で衝突するUUIDの作り方 - Speaker Deck 笑い話としても乱数の難しさの側面としても面白いのですが、これを見た人たちの反応がちょっと勘違いしてそうだったので補足します。 別に私は暗号とか乱数とかの専門家ではないです。 発表者の方のコードは読みましたか? 少し速度が必要になるのでRustに移植します。 [package] name = "genuuidv4" version = "0.1.0" edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] rand = "0.7.2" sfmt = "0.6.0" use
TL;DR can you trust every browser to generate globally unique identifiers at scale? At Teads, we have tried, and the answer is yes, with a few caveats. This article describes the experiments we’ve run and the discoveries we made along the way. Why we need client-side unique identifiersGenerating unique identifiers is a common need that third-party scripts integrated on Web pages and e-commerce sit
開発部のにゃんです。主にバックエンドを弄っております。 Webアプリケーションではセキュリティ対策のためにランダムな文字列を使用する場面が多々あります。例えば CSRF対策のトークン OAuthやOpenID Connectで使用するnonce, state, code_verifier メールの到達確認用URLのトークン パスワードをhashする際に使用するsalt セッションID これらの値は単に衝突しなければOKというものではありません。十分なセキュリティ強度を確保するためには推測不可能なランダム値を使う必要があります。 以下は推測不可能なランダム値ではありません。セキュリティが求められる場面では使ってはいけません。 Math.randomなどの疑似乱数 日付やユーザ情報のハッシュ ではどのような値が適切なのでしょうか? /dev/randomと/dev/urandom Linuxに
テレビゲームやギャンブル、暗号は一見すると全く関係ないように思えますが、実はすべて「乱数」を利用しており、現代人の生活は乱数なくして成立しません。そんな乱数をコンピューターでどうやって生成させているのかを、プログラミング関連のブログ・BetterProgrammingが解説しています。 Generating Random Numbers Is a Lot Harder Than You Think | by Sunny Beatteay | Sep, 2021 | Better Programming https://betterprogramming.pub/generating-random-numbers-is-a-lot-harder-than-you-think-b121c3e75d08 プログラミングで乱数を使いたい場合、例えばRubyの場合は「rand」、Pythonの場合は
はじめに ある乱数生成器が N 個のセットのなかからランダムに一つを返すとき、その返り値をそれよりも小さな範囲に収まるようにしてから利用したい、という要件にたまに出会います。例えば、[0, 2^32) の範囲内の乱数を生成する乱数生成器を利用できる環境で、サイコロの目をランダムに計算するには、何らかの方法を使って [0, 6) の範囲の乱数に収める必要があります。このような getrandom(2) や /dev/urandom を使った乱数生成器の例以外にも、例えば Int64 のユーザー属性値を入力にしてユーザーを 10 種類に均等に分類したいという類の要件を過去にレビューしたこともあります。 ある値域をより小さい値域にマップするために、よく利用されるのは剰余(モジュロ)演算です。乱数生成器の例でいえば、その返り値を X とすると、 X % 6 を計算すれば結果は [0, 6) に収ま
You can revert to English at any time by clicking on the language menu on the top right corner of the page. Blog posts, Donjon | 07/06/2021 Kaspersky Password Manager: All your passwords belong to us The password generator included in Kaspersky Password Manager had several problems. The most critical one is that it used a PRNG not suited for cryptographic purposes. Its single source of entropy was
はてなに子供二人がプログラムの方針で対立したという話が掲載され話題になってるらしい(はてな匿名ダイアリー、[B! 増田] )。原因は「じゃんけんゲーム」の実装方針であるらしい。ゲーム内容は、画面でグー・チョキ・パーのいずれかを選びボタンを押すと、相手となるCPU側の手と勝敗が表示されるシンプルなもの。喧嘩の原因となった方針の違いを元記事を引用すると、 次男はまずCPUの「手」を乱数で決定し、画面に入力された「手」と比較して勝敗(と引き分け)を決める、素直な処理だった 長男はそれに飽きたのか、まずは乱数で「勝ち」「負け」「引き分け」を乱数で最初に決めてしまい、その後で結果に応じたCPUの「手」を決定するというロジックだった そうだ。次男は長男の設定したロジックに納得がいかなかったらしく、「兄ちゃんのはじゃんけんで勝負してない」「勝ち負けを最初に決めてしまうなら意味がない」と批判、対して長男は
あらすじ Haskellでの乱数生成ライブラリは長らく群雄割拠の時代が続いていました。 その理由は、公式のrandomパッケージの使い勝手がすこぶる悪かったため、 各々が独自のインターフェースでまともな乱数生成ライブラリを公開していました。 その時代は、random-1.2の登場により終わりを迎えました。 これからはrandomパッケージを使えば基本的に問題ないでしょう。 Before random-1.2 Haskellの公式の乱数生成ライブラリがrandomだったのですが、 このライブラリは System.Randomといういかにも標準的なモジュールを提供している割に使い物になりませんでした。 そのため、 mwc-random tf-random xorshift mersenne-random-pure64 などのライブラリが独自のインターフェースを提供していました。 randomの
class XorShift128Plus { /* constants */ protected const MASK_S5 = 0x07ffffffffffffff; protected const MASK_S18 = 0x00003fffffffffff; protected const MASK_S27 = 0x0000001fffffffff; protected const MASK_S30 = 0x00000003ffffffff; protected const MASK_S31 = 0x00000001ffffffff; protected const MASK_LO = 0x00000000ffffffff; protected const ADD_HI = 0x9e3779b9; protected const ADD_LO = 0x7f4a7c15; protec
This can arise when you have different threads. But it’s of prime importance in a lazy language like Haskell, since it makes it possible to generate deterministic random numbers lazily. For instance, split is used in QuickCheck’s Gen monad. An easy implementation of split is to duplicate the current state. But, the two parallel sequences will not be independent: indeed they will be identical. A sl
QRNG API now hosted on AWS This website offers true random numbers to anyone on the internet. The random numbers are generated in real-time in our lab by measuring the quantum fluctuations of the vacuum. The vacuum is described very differently in the quantum physics and classical physics. In classical physics, a vacuum is considered as a space that is empty of matter or photons. Quantum physics h
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く