C言語なら俺に聞け 160

■ このスレッドは過去ログ倉庫に格納されています
2022/12/28(水) 10:40:30.02ID:PyoNDBFu0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 159
https://mevius.5ch.net/test/read.cgi/tech/1659623547/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/01/20(金) 13:55:55.25ID:PBwN2qBR0
ROMから取り出しだと値が偏ったりしないかな?
2023/01/20(金) 16:51:45.29ID:pV6+JPqV0
やったことないけど>>122見る限りりそんなに偏らないんじゃないかな
基本的にやりくちとしては暗号分野の鍵導出処理と似たようなことをしてるんだから
2023/01/20(金) 18:40:05.00ID:R9yntGVvd
暗号の乱数とゲームで使うような乱数は違うだろ
2023/01/20(金) 18:58:44.32ID:coXRsv3s0
値の範囲を調整するのに mod とると周期性が現れたり偏ったりするねんな
2023/01/20(金) 19:06:38.00ID:vRsHomcy0
>>122
リフレッシュカウンタから乱数を作るのがお約束ですよ、8 bit の時代はね
2023/01/20(金) 19:28:35.95ID:R9yntGVvd
>>127
そういうCPUやBASICROMに依存する方法は最新機種では動作が変わったり予測できないので商業レベルではやらなかった
かわりに線形合同などのアルゴリズムを使った
アーケードのプレイデモではジョイスティックとボタンの記録だけ取って再生してメモリを節約してたので
毎回同じ乱数パターン(敵の移動や弾発射)が獲得できないと困るので
2023/01/20(金) 20:01:16.13ID:EscqwfOXM
>>126
とはいえ、0~10までの乱数取得するのに%使わずにどうしろと…
質の良い疑似乱数使えば問題無い
2023/01/20(金) 20:28:16.76ID:R9yntGVvd
疑似乱数にはたいてい周期性が現れるもの
とくに下の桁に現れやすいので
上の桁を取ればいい(modではなく目的の桁/乱数の最大桁をかける)
2023/01/20(金) 20:45:14.37ID:A1RdTars0
>127
再現性のある乱数が欲しいって場合も微レ存。
2023/01/20(金) 21:21:15.74ID:FDJF8fJ70
>>129
乱数源自体は良質なものだという前提で、
0~10 が欲しいときに単に %11 にすると小さい値のほうが少し出現率が高くなる。
たとえば乱数源がバイト単位だとすると、
255 以下で最大の 11 の倍数 (253) を超えた分 (254~255) が出現率を偏らせる原因。

だからそのような値が出たときに捨てて次の値を使用することにした上で %11 すればいい。
C++ の std::uniform_int_distribution などはだいたいそういう実装になってる。
2023/01/20(金) 21:27:39.82ID:A1RdTars0
アセンブラで

MOV AL,8bit 乱数
MOV BL,欲しい整数乱数最大値+1
MUL BL
;AHに0からBL-1までの乱数が入る

ってなことやってたような気がする。
計算上最大値の出現率が低いみたい。
16bitに拡張すれば多少改善。
2023/01/20(金) 22:44:15.60ID:vRsHomcy0
>>128
そうですかね…
案外 LD A, R とかやってた気がするなあ…気がするだけですけどね
2023/01/20(金) 22:45:17.95ID:vRsHomcy0
>>131
8 bit の時代に、ですか?
結構念入りなアセンブラプログラムですねえ、めんどくさくって死にそう
2023/01/20(金) 23:11:55.26ID:FDJF8fJ70
ファミコン、スーパーファミコン時代の有名ソフトの乱数生成の仕組みが今ではかなり明らかになってるが、
ドラクエとかファイナルファンタジーとかでも思ったより場当たり的な雑な仕組みで驚く。
こういう用途だと多少の性質の悪さもそれはそれで味になるということもあるんだろう。

シミュレーションとか暗号とかに関わるものだと理論的な裏付けがないと恐ろしいが……
2023/01/21(土) 00:33:34.31ID:EJn7glvGM
>>130
いや、だから長周期な乱数が有るんだよ
間違いなくオマエが生きてる内に一週しないよ
下位バイトだって当然だ
周期してると思ったら死ぬまで見てれば周期してないのが分かるよ
2023/01/21(土) 00:40:48.68ID:EJn7glvGM
1 2 2 と出て、2が偏ってと言う奴はいない
あまりにも範囲が小さいと、偏ってるかとか周期が有るかは長く見ないと分からん
2023/01/21(土) 00:51:58.56ID:9x5I4Xif0
メルセンヌツイスタ
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%AB%E3%82%BB%E3%83%B3%E3%83%8C%E3%83%BB%E3%83%84%E3%82%A4%E3%82%B9%E3%82%BF
2023/01/21(土) 00:55:32.36ID:iEE3pXT90
>>137
周期の話じゃないよ 乱数発生器の下位ビットはランダムじゃないことがあるって話だよ
全部同じ値だったりrand()%2で0と1が交互に順番に出てくるだけだったりするから上位ビット使おうってこと
自前で乱数を作る際にmodを使わないなんてのはC言語のFAQレベルの常識の話だからちょっとネットでもあさって勉強すればすぐ身につくよ
それ以前に良い発生器を使えばいいっていうのはその通りだね
2023/01/21(土) 01:15:16.87ID:EJn7glvGM
>>140
オマエが無知なの分かったよ
下位ビットが規則的になるってのは何も考えてない線形合同法だけの性質だ
msvcrtのrandは線形合同法で求めた32bitの内上位16bitを下位にシフトしてるから、そういう性質はない
他の長周期な乱数はなにもしなくても当然そんな性質はない
2023/01/21(土) 01:36:04.58ID:EJn7glvGM
ちなみにLinux(glibc)で% 10で試しても、偶数と奇数が交互に続くと言うことはなかった
カルドセプトで話題になった乱数のバグは、自前で線形合同法を実装したから起きた問題だ
普通にSDKの乱数を使ってたら起きなかっただろう
2023/01/21(土) 02:05:39.28ID:sslkm/QP0
>135
8/16bit時代のティルナノーグってゲームがシナリオコードっての使ってマップやシナリオを自動生成するらしく、
まぁ多分シナリオコードを再現性のある乱数のキーにしてるんだろうと。
2023/01/21(土) 05:00:16.98ID:Q9FQ3lI1d
>>141
結局下位のほうに周期性が現れやすいというのは肯定してるなw
ライブラリのを仕組みもわからずそのまま使うと問題が起きた時に危険なので自前で作ったほうが楽なこともあるんだよ
移植の問題もあるから
2023/01/21(土) 11:13:45.88ID:TvLSyCnz0
理想的な一様乱数であっても
頻度が一様から少し崩れる件については
>>132 でクリアになってる前提で
次に周期等の乱数の素性をああだこうだやってるのでいいんだよね?
2023/01/21(土) 12:57:12.01ID:EJn7glvGM
>>144
線形合同法そのままの下位ビットはランダム性が低いから上位16bitを使うという実装がされてる
これは%で下位ビット使っても何も問題無い
他の乱数(例えばメルセンヌツイスターとか)とかも下位ビット使っても何も問題無い
オマエは何が言いたいんだ?
乱数イコール素の線形合同法と決めつけてんのか?
2023/01/21(土) 22:32:06.91ID:PxhUXXTz0
それより MT を利用したストリーム暗号の実装を探しているんですが、誰か良さげなのを書いていませんかね?
2023/01/21(土) 23:01:28.77ID:5FfejZmpM
暗号の実装なら乱数源よりハッシュ関数の設計の方が重要だと思うけど
2023/01/21(土) 23:09:55.12ID:AnImjWZM0
メルセンヌツイスタは予測はしやすいので暗号に向かないって話じゃなかったっけ?
理論に詳しいわけじゃないけどストリーム暗号だと生成した乱数を
ほとんど順序通り使うことになるので素直に使うと弱い暗号になってまう。
それをカバーする案がどこかで出ているとかいう話なのかな?
2023/01/21(土) 23:25:57.01ID:PxhUXXTz0
>>148-149
生成したMT乱数をハッシュに通して xor マスクに使えば今すぐにでも実装できまますが、馬鹿みたいにコストが高い
もっとお気楽に「暗号論的に安全な」マスクを生成する方法があるはず、と踏んでいます

>>149
生成された暗号列から、暗号生成系内の状態を推測する手段が
*****「ありうる」*****
というだけで、実際に MT において予測しやすいかどうかは、また別の問題かと
2023/01/22(日) 06:45:18.91ID:5LyKSzcv0
メルセンヌツイスタは暗号論的乱数ではないからな
標準の範疇ではrandom_deviceと併用することで暗号論的乱数を作れる

# 俺はrandom_deviceにハメられたことがあって不信感持ってる
2023/01/22(日) 06:57:44.96ID:GyU+xFDzM
ほぼ2の20000乗の長周期の乱数列の出現パターンに対して実用的な有限時間内に値の予測とかできるものなのか?
2023/01/22(日) 09:17:28.62ID:m0kendFMd
初期値を毎回同じにするとかマヌケな実装してなければ大丈夫だが
そういうの意外と多いからな
2023/01/22(日) 11:31:30.58ID:ZNfmIfkb0
>>152
ざっと調べてみた感じだと素朴なメルセンヌツイスタだと 624 個の連続する乱数列があれば内部状態を計算可能ということみたいだね。
2023/01/22(日) 11:55:01.35ID:2NQ69pgqM
擬似乱数は内部状態から数列を計算して外部出力しているのであって、出力された数列の結果だけから内部状態を計算して次回出力を予測するのは難しい
623もの内部変数をすべて確定させようとすれば途方も無いことになると思うけど
2023/01/22(日) 13:27:42.71ID:slZVcCWf0
量子コンピュータならあっという間かもしれん
2023/01/22(日) 14:53:35.01ID:5LyKSzcv0
もしかしてハッシュを復号できると思っている人がいるの?
2023/01/22(日) 17:32:55.31ID:KzI8pxO80
現実で乱数で問題になるのは中周期
短周期は誰が見ててもすぐに欠点がわかる
中周期は人間が見てわかりづらいけど
へたをすると推測されうる

本当に重要な場面では線形合同法は使わないね
2023/01/22(日) 18:43:18.71ID:5nd4WcY/0
>>157
ハッシュを復号?
何意味不明なことを言ってるんだよw
2023/01/22(日) 18:52:07.93ID:Gv0g55llH
15は大した乱数を求めてないだろうし線形合同法で大丈夫でしょ
2023/01/22(日) 19:51:00.57ID:r87X7TULM
少なくともゲーム用途ではもう決定版とも言えるのがPCGだ
これは線形合同法を加工したものだ
大体の用途にはこれだけ知ってれば十分だろ
2023/01/23(月) 07:23:09.72ID:HN6zkKZyd
>>159
返事しやがったwww
2023/01/23(月) 07:36:54.35ID:rT2ytU3d0
>>162
ハッシュ復号で顔真っ赤w
2023/01/23(月) 07:39:15.92ID:HN6zkKZyd
無理ありすぎ
157の発言内容で恥さらしたと思ったの
おまえだけだから
2023/01/23(月) 07:52:21.59ID:rT2ytU3d0
ならハッシュ復号とか言う意味不明な用語を説明してみw
2023/01/23(月) 07:59:00.47ID:OYWoWYjxa
必死やね
2023/01/23(月) 08:34:51.13ID:rT2ytU3d0
>>166
>>164 がなw
2023/01/23(月) 09:53:15.91ID:HN6zkKZyd
昔、ブラックエンジェルスって漫画で
「神父様」というワードで殺人スイッチ入るキャラいたけど
ここには「ハッシュ」で発狂するやつがいるな
2023/01/23(月) 10:00:52.21ID:ZftbX+tS0
発狂なんて表現は、自身が精神科の患者で無ければ口にしない言葉だ
2023/01/23(月) 10:26:46.25ID:e9NCR7zVr
ハッシュ値からハッシュ関数への入力を求めることをハッシュを復号て言ってるのかと、思ったけど違うの?
2023/01/23(月) 11:18:20.16ID:TfCEWCiYM
普通はそれを原像攻撃といいます
2023/01/23(月) 12:07:23.12ID:2WGuD1xXd
>>170
ハッシュドビーフを牛に戻せるか?
2023/01/23(月) 13:04:17.48ID:nA4Uy4AL0
おおよそハッシュ関数って多対1の写像やから 与えられた入力を予測するのは難しいわね
2023/01/23(月) 13:05:15.54ID:rT2ytU3d0
>>170
その意味かどうかもわからんしそもそも>>157が唐突に言い出した意図もわからん
まあ本人もよく理解してないだろうことはわかるけどw
2023/01/23(月) 18:58:27.02ID:ru4XzPDN0
暗号学的ハッシュ関数は暗号学的なだけで暗号ではないわな
まあ、ややこしいのはわかる
2023/01/23(月) 19:37:29.31ID:ZftbX+tS0
現在5chで使っているIDもハッシュ関数使っています
掲示板毎の番号、日付、IPアドレスの組み合わせ32ビットを
16ビットを求めてます
そのため、IDから元のIPアドレスは特定不可能とされてます
2023/01/23(月) 19:39:57.78ID:ZftbX+tS0
組み合わせた32ビットのキーから
16ビットのIDSを求めてます

でした
言葉足りなくて済みません
2023/01/23(月) 19:50:20.64ID:HN6zkKZyd
優しいお兄さんたちがやんわり教えてくれてるぞ
よーく聞いとけなハッシュ君
2023/01/23(月) 20:22:55.39ID:rT2ytU3d0
確認のための>>170とお前以外に復号なんて言ってるアホはいないけどなw
2023/01/23(月) 20:25:01.82ID:HN6zkKZyd
いいからよく聞いとけ
おまえには金取ってもいいくらいの
特別サービスだぞ
2023/01/23(月) 20:28:15.99ID:rP/zs2fBa
上げ足取りの極みやね
伝わるとしても即興の造語は決して許されない
2023/01/23(月) 20:34:11.46ID:rT2ytU3d0
>>180
>>166ww
2023/01/23(月) 22:02:00.33ID:FHYSH6Afr
>>173
ハッシュってできる限り衝突しないようにするけど多対一になるのか?
2023/01/23(月) 22:10:48.44ID:gaP9WTLb0
そうじゃなければ意味無いでしょ
バイト表現をそのままキーにでもするつもりか
2023/01/23(月) 22:18:56.34ID:gaP9WTLb0
大きな空間から小さな空間へぐちゃっと潰す非単射だからhashと呼ばれるんだろうし、むしろ被らなければハッシュ法とは呼べない
2023/01/23(月) 23:25:11.50ID:JEHxFd+10
>>183
あくまでできるかぎり衝突しない努力をしているのであって
絶対に衝突しないことを保証しているわけではない以上
単射にはならんやろ
2023/01/24(火) 00:14:26.83ID:D+LPvIAC0
この掲示板で使ってるIDは、実際に衝突している
32ビットのバリエーションがある対象を16ビットパターンに圧縮する
どの位衝突が発生するか、簡単に計算で出せるだろう
2023/01/24(火) 00:47:30.90ID:Ago7Tr1G0
>>183
元になる情報より小さい空間への写像なんだから当然に衝突することはありうるよ。
確率が均等になるようにデザインされるのが普通だが。

それとハッシュといっても均等でありさえすればよいハッシュテーブルなどに使うハッシュ関数と
意図的に衝突させるのが困難な暗号学的ハッシュ関数は事情が異なる。
2023/01/24(火) 07:19:05.11ID:eIuiRJ7Hd
I/Oのマシン語リストの1行チェックサムだったのが
CRCに進化し、更にCRC32になり・・・
2023/01/24(火) 07:22:48.88ID:hOWV1dmX0
>>189
それは誤り訂正符号であってハッシュじゃない、誤りが少なければ訂正できる、という性質のもの
2023/01/24(火) 07:28:16.15ID:CHY+WBSp0
予測や推論が可能な写像か
2023/01/24(火) 07:38:18.20ID:/rWynzzhM
誤り検出や訂正と予測や推論は違う
巡回符号では予測は出来ない
2023/01/24(火) 07:45:39.55ID:eIuiRJ7Hd
>>190
いや、訂正なんて求めてなかった
あくまで検出さえできれば
点検なり再送なり対応はどうにでもできる
ちまちま訂正を試みて挙げ句不確実とか
バカバカしくて眼中になかった
2023/01/24(火) 08:00:50.17ID:yjc0n37Q0
巡回冗長検査(CRC)
https://ja.wikipedia.org/wiki/%E5%B7%A1%E5%9B%9E%E5%86%97%E9%95%B7%E6%A4%9C%E6%9F%BB

巡回符号
https://ja.wikipedia.org/wiki/%E5%B7%A1%E5%9B%9E%E7%AC%A6%E5%8F%B7
2023/01/24(火) 08:05:18.69ID:iB9B6REv0
元データと誤り訂正符号がセットになってる前提だものね
PGPでいう暗号ではなく署名
2023/01/24(火) 13:20:38.09ID:cMLylpMed
>>15 だが待ちくたびれたニダ
オラの欲しいのは乱数が性器分布してるものなの!
銀杏乱数ではありまへん
さあ、素晴らしいコードを見せてケレ
2023/01/24(火) 18:41:20.06ID:XLjyfoTr0
const char *subarasiikoodo() {retrun "乱数が性器分布してるもの"/*"銀杏乱数"*/;}
2023/01/24(火) 23:29:13.35ID:1YOqlgJ1d
>>196
淫乱とか性器を見せろとかなんなんだね君はいい加減にしたまえ!
2023/01/25(水) 20:45:01.15ID:8z5wZ+1pM
卑猥な言葉に反応する大人を見てはしゃいでいる子供って感じ
2023/01/26(木) 07:05:46.47ID:epYCai+9d
プログラム技術板で猥談にしか参加できないやつpgr
2023/01/26(木) 11:50:43.36ID:xdWnPQo8r
>>185
普通のハッシュが非単射なのはその通りだが、
完全ハッシュというものも一応ある。
2023/01/26(木) 23:06:32.72ID:HOinztZt0
何に使うものなんですか?
2023/01/27(金) 05:48:59.42ID:Ia5Vv5I40
セキュリティがどうでもいい時に
速度を要求されるとき
2023/01/27(金) 08:04:21.64ID:DHOIN7NEM
パスワードなどを暗号化して保存する時ハッシュ値を保存する
他のパスワード値と重複することが無いように完全ハッシュとする
万一衝突すれば他人のパスワードが誤ってすり抜ける可能性が生じる
2023/01/27(金) 09:53:14.54ID:hWSIv7AR0
んなアホな
完全ハッシュの説明はともかく、パスワードに関してはIDとペアで使うんだから他人のパスワードと被ろうがどうだろうが関係がない
そもそもソルト使うんだからuser1とuser2が同じパスワードを使ってもハッシュ値は別になる
2023/01/27(金) 10:07:50.70ID:GgXEpiKGM
いや完全ハッシュの前提が崩れると違うパスワードが同じハッシュ値で衝突して区別できないので破綻する
ソルトは完全ハッシュを担保するための手段
2023/01/27(金) 10:42:53.11ID:MqPTrKVr0
https://en.wikipedia.org/wiki/Perfect_hash_function
> Disadvantages of perfect hash functions are that S needs to be known for the construction of the perfect hash function.

無理やろ
2023/01/27(金) 10:59:53.36ID:WUhobyCY0
暗号学的ハッシュ関数
https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%AD%A6%E7%9A%84%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0
2023/01/27(金) 11:02:54.46ID:hWSIv7AR0
MM7f-qqxOは衝突がないっていうのがどういうことなのかなんか勘違いしてるんだろう
そういうもんを用意したとして>>203のいう通り強度なんかめちゃくちゃ弱くなるんだからさ
いずれにしても破綻するとか言われたところで世の中は衝突ありのSHA-2使ってんだからもうちょい勉強しとけ
2023/01/27(金) 12:35:15.87ID:ctyQpdLuM
>>206
ハッシュ値とハッシュテーブルを混同しててクソワロタw
211デフォルトの名無しさん (スッップ Sd1f-P0Of)
垢版 |
2023/01/27(金) 18:34:56.90ID:I0K5YroCd
>>199
ちょっとした変換ミスだろ?
あるシードを与えてそこから連続的に乱数を大量に取得してそれらを並べてみたら、あら不思議 平均0分散1のヒストグラムができました、てなモノが欲しいだけなのに・・・
2023/01/27(金) 19:16:01.14ID:ctyQpdLuM
正規分布乱数でググれば幾らでも出てくる
ちゃんと理解するのは容易じゃないがな
2023/01/27(金) 23:07:01.65ID:Nd07Ngynd
>>204
説明としておかしい
他人のパスワードが誤ってじゃなくて
悪意ある他人が総当たり的に適当なパスワードを試して当たってしまう可能性が高くなるんだろ
2023/01/28(土) 13:25:21.47ID:5Vj/XtKl0
それはどのパスワードでも同じ
2023/01/28(土) 14:42:34.89ID:dMjf5U6fa
>>214
平文ならパスワードが違えばマッチすることはない
ハッシュだとパスワード違うのにハッシュ値が同じになる(ことが理論的にはあり得る)から違うパスワードでも通っちゃうって話だろ
2023/01/28(土) 15:06:06.84ID:ys7yM/+j0
パスワード程度の小さなデータなら
原データよりもビット数が多いハッシュを使えば安全だろ
2023/01/28(土) 15:09:44.90ID:bcwoFDyEd
おまいらにちょっと質問。

https://github.com/katahiromz/GazoNarabePDF/blob/858aed3331fb9f6b97836918c449366cb535bc39/GNPDF.cpp#L31

SHA-256でシェアウェアのパスワード設定をしているけど、このハッシュとソルトでブルートフォースできますか?
2023/01/28(土) 15:29:16.38ID:x6yOEZAM0
攻撃に非現実的な時間が必要ってだけであって可否を問うなら可能に決まってんだろうよ
ちょっと考えれば分かると思うんだが、できますかとか脳ミソ幾分欠損でもしてんのかね?
2023/01/28(土) 15:44:01.84ID:bcwoFDyEd
スーパーハッカーならスパッと解けると思ったが、つまらないな
2023/01/28(土) 15:45:30.65ID:jdKvyKGa0
口の汚さはアタマ悪くても可能に決まってます
2023/01/28(土) 16:39:52.59ID:NqcfPhRT0
>>216
ビット数が多くても偏りの多いハッシュ関数使ってたらダメってことすらわからんのか?
2023/01/28(土) 17:23:18.26ID:btPcpkQFM
パスワードは間違いが続くと、暫く時間たたないとログイン出来なくすればブルートフォースもほとんど不可能になる
なのでハカーは総当たりなんてせずに、何処かで漏れたIDとパスワードを違うサイトで試すだけだ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況