Discuss Scratch

goigoigun
Scratcher
84 posts

セーブコードについてみんなで話し合う場所1

セーブコードは暗号化されているのは分かっていると思いますが、暗号化の仕方でいちばん簡単な方法はリストを使った方法です。
例えばA=1 D=4のような感じです。それぞれの文字をリストに追加し、セーブコードを作り上げています。(語彙力なくてすいませんm(_ _)m)
ロードするときはセーブコードの◯番目の文字をリストの中から番号を読み取り、ロードしています。(度々語彙力なくてすいませんm(_ _)m)
j91322029
Scratcher
74 posts

セーブコードについてみんなで話し合う場所1

セーブコードを保存・読み込みをするものですがこういうのはどうなのでしょうか?仕組みが分かれば改造させられたりするので…

Last edited by j91322029 (Dec. 10, 2022 11:31:18)


ああ、悲しいことに、私の署名は怒ったバケツに食べられました。発案者:magicAho
Oh, sadly, my signature was eaten by an angry bucket. この署名を広めよう!
inoking
Scratcher
1000+ posts

セーブコードについてみんなで話し合う場所1

j91322029 wrote:

セーブコードを保存・読み込みをするものですがこういうのはどうなのでしょうか?仕組みが分かれば改造させられたりするので…
プロジェクトの内容をここで説明お願いします。

これは署名と呼ばれるもので投稿本文とは関係ありません。
Scratch は「世界最大の子ども向けコーディングコミュニティーで、シンプルなビジュアルインターフェースを持ったコーディング言語」
 つまり「子ども SNS」ではない

・「傾向」とは単に一定の基準で作品を並びかえただけのもので、ランキングでもなんでもないナンバーワンよりオンリーワンを目指してみては?
・「フォロー」とは他の Scratcher が何をしているかを簡単に確認するためのもので、「フォロワー」は「ファン」ではない
・「スタジオ」とは特定のテーマに沿って作品をまとめたり共同制作したりするための場所
・「星」や「ハート」などを何かの見返りとすることは Scratch チームによって禁止されている
ryufox
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

街づくりゲームにピッタリなセーブコードってありますかね、
建物の座標、レベル、持ってるアイテムくらいがあります。
レベルとアイテムは何とか出来そうですが、座標は難しそうです。
数字でできたとしても、かなり長くなって難しそうです。

Last edited by ryufox (Dec. 14, 2022 08:03:14)


色々な作品作ってます。 ぜひ見てね!
Jinenjo_000
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

>> #426
一般論となりますが、以下のような方法が考えられます。
・基数の大きな進数で表す
 例えば10進数のセーブコードを1024進数に変換すると、桁数は3分の1くらいになります。
・ランレングス圧縮
 繰り返しの多いデータで効果的です。
・ゼロ幅文字を使う
 セーブコードの見かけの長さが短くなるので、コピペが楽になります。
so-so-egg_sub
Scratcher
7 posts

セーブコードについてみんなで話し合う場所1

リンク切れ防止
100までの素数の中からランダムに選んでそれをかけてどこかに素数隠してまたランダムに他をを選んでそれを割ってまたどこかに隠す

失敗?誰が君が失敗したなんて言ったんだ
君がやったそれは失敗じゃない
成長のための
hamburgdaisuki
Scratcher
13 posts

セーブコードについてみんなで話し合う場所1

セーブコードを、作るのって難しいですもんね。
oira-edu
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

セーブ機能は桁をそろえるか区切るかですよねー
ほかに方法はありますか?

各ディスカッションフォーラムの#1は確認済みです。

高性能 ☁クラウドリスト / Cloud List
宣伝に使える ! スクラッチアイコン
Jinenjo_000
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

>> #428
後ろに続く情報の桁数を先頭につけることもできます。
Catapult-
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

セーブコードを絶対に改ざんされないようにする手順を考えました。(要サーバ)

①まず、クラウド変数を利用した独自通信プロトコルを作る。(長さとかハッシュとか宛先をヘッダにつけるなど)
②ユーザーができる動作を数値に置き換える。
③ユーザーが何かアクション起こすたびに、ユーザーはサーバのアカウントに向けてその動作を数値化したものを、先述のプロトコルで送信する。
④サーバは受け取った動作が正常であることを確認し、必要であればセーブコードを作成または書き換える。(簡単なデータベースも要ります。この辺はpythonやらjsやらでうまいことやる)
⑤新しいユーザーや再び訪れたユーザーに対して、サーバーは必要なセーブコードを送信する。

という流れです。この仕組みをベースに、ユーザーが決めたパスワードを利用した公開鍵暗号などを使えば、理論上は改ざんされることがなくなります。この方式は、独自プロトコルを作っている@daikonnbatakeさんとの議論の中で出たアイデアです。ただ、この方式はいわゆる「理論上可能」というもので、コストとかは考えてません。前の議論のように多少面倒くさくするだけで一定の不正防止効果は出ると思います。

駆け出し開発者です。Scratchではゲーム制作や技術開発などをしています。フォローしてもらえると嬉しいです。
Jinenjo_000
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

その方法では、ユーザーがロードしようとしたセーブコードの正当性が保証されないのでは?

Catapult- wrote:

(前略)
この仕組みをベースに、ユーザーが決めたパスワードを利用した公開鍵暗号などを使えば、理論上は改ざんされることがなくなります。
(後略)
この部分が「サーバーが決めたパスワードを利用した公開鍵暗号(署名)」であれば理解できるのですが。
Catapult-
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

あ!そうでした…
①初回はサーバーがユーザーにサーバーの公開鍵を送る
②それで暗号化したパスワードをユーザーが送る
③以後サーバーはユーザーのパスワードをもとにした公開鍵でユーザーに通信(ユーザーの公開鍵はサーバーだけが知りえる状態)
という感じにすればよさそうです。というかこの方法ならサーバー→ユーザーは共通鍵でもいいですね。失礼しました。

駆け出し開発者です。Scratchではゲーム制作や技術開発などをしています。フォローしてもらえると嬉しいです。
Jinenjo_000
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

>> #432
私が述べているのは #430 には、セーブコードの正当性を検証する手順が見当たらないという点です。
つまりユーザーが入力したセーブコードが、確かに②③④の過程を経てサーバーから発行されたものである、ということが確認できないんじゃないかと思っています。
「公開鍵暗号を使えば」と言うので、もしかしてサーバーがセーブコードにデジタル署名をつけるということなのかなと思ったのですが、どうやら違うようですね。

あなたの言う「改ざん」とはどういう意味ですか?

Last edited by Jinenjo_000 (May 23, 2023 03:14:43)

Catapult-
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

>> #433

確かに、ユーザーが受け取ったセーブデータがサーバーから発行されたものかの検証まで考えてませんでした。申し訳ない…
それなら、セーブデータと同時にパスワードも暗号化して送るというのはどうでしょうか。
ユーザーはサーバーの公開鍵を使ってパスワードを送るので、そのユーザーとサーバー以外はパスワードを知らないはずです。

あとよくよく考えたら、クラウドAPI(Websocket)を利用すればユーザー名も偽装できてしまうので、そのサービス内でのユーザー名&パスワードという風に登録するのがよさそうですね。

「改ざん」は任意のユーザーが任意のユーザーのセーブデータを改変または削除することのつもりです。
いろいろ抜けてましたね。

駆け出し開発者です。Scratchではゲーム制作や技術開発などをしています。フォローしてもらえると嬉しいです。
Jinenjo_000
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

話している内容が違います。
あなたの案ではユーザー自身による、自分のセーブデータの改ざん(例えばステータスを強くする、アイテムを増殖する)を防げないと思う、と言っているのです。

————— 正常な動作 ———————–
初回ログイン時
ユーザー –(行動)–> サーバー(「行動」が正常か確認)
ゲーム終了
ユーザー <–(セーブコード S0)– サーバー

2回目ログイン時
ユーザー –(セーブコード S0)–> サーバー
ユーザー –(行動)–> サーバー(「行動」が正常かS0に基づいて確認) (S0 → S1 に書き換え)
ゲーム終了
ユーザー <–(セーブコード S1)– サーバー
—————————————————————-

というのがあなたの案だと思いますが、

———– 悪意あるプレーヤーの場合 ———
初回ログイン時
ユーザー –(行動)–> サーバー(「行動」が正常か確認)
ゲーム終了
ユーザー <–(セーブコード S0)– サーバー

2回目ログイン時
ユーザー –(セーブコード S0' (≠ S0))–> サーバー
ユーザー –(行動)–> サーバー (「行動」が正常かS0'に基づいて確認)(S0'S1' に書き換え)
ゲーム終了
ユーザー <–(セーブコード S1')– サーバー
———————————————————————–

このとき S0 ≠ S0' であることを判別できなければ、不正なゲームデータに書き換えられてしまいます。
これを防ぐには、そのセーブコードがサーバーから正当に発行されたものであることを検証し、ユーザーが不正に生成したセーブコードを拒否する必要があります。対策の具体例として私は「セーブコードにサーバーのデジタル署名をつける」というのを先の投稿で挙げました。

——————- 不正対策の一例 ——————-
初回ログイン時
ユーザー –(行動)–> サーバー (「行動」が正常か確認)
ゲーム終了
ユーザー <–(セーブコード S0 + S0に対する署名)– サーバー

2回目ログイン時
ユーザー –(セーブコード S0' + S0に対する署名)–> サーバー
署名が S0' に対して発行されたものではない
→S0の改ざんを検出したので、それ以降の動作を行わない
———————————————————————–

Last edited by Jinenjo_000 (May 24, 2023 03:24:23)

Catapult-
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

すみません、#430の説明が不足していました。
私の案では、サーバーはセーブコードを発行しユーザーに提供するのではなく、サーバーそのものにセーブデータを保存することを考えていました。ユーザーはセーブコードを保管するのではなく、システム利用時にサーバーからクラウド変数で取得するイメージです。セーブデータのことをセーブコードを表記したため誤解を生んでしまいました。

#433の指摘では「サーバーに成りすました第三者からの不正なパスワードが届く可能性」についてだと思い、サーバー側からも認証情報をつけるべきかと思っていました。

ユーザーにデータを任せると完璧な不正対策はできないと思い込んでいましたが、ユーザーが知りえない情報を加えることで実現できそうですね。(ただし完璧にするためには常時サーバーが監視する必要はある)

そもそもここはセーブコードについてのトピックだったので、少し場違いな投稿でした。一連の投稿に関して、すみません。

駆け出し開発者です。Scratchではゲーム制作や技術開発などをしています。フォローしてもらえると嬉しいです。
Jinenjo_000
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

誤解をしていたようです。失礼しました。
111yu123456
Scratcher
28 posts

セーブコードについてみんなで話し合う場所1

リストで暗号化すると片っ端から行けばやれてしまうと思います
Mario-098
Scratcher
100+ posts

セーブコードについてみんなで話し合う場所1

#438
同意します。
逆算(?)のプログラムが簡単に作れます。

↓ここから下は署名です。いちいち手動で書いているわけではありません。

トピック・scratch内ですべての文字を描画することについて
#ScratchInScratchProject

html pleyer 作ってます(https://scratch.mit.edu/projects/863871016/)。開発中です。

最終更新2024年1月8日 @Mario-098 No Flash version detected
retro_funny
Scratcher
1 post

セーブコードについてみんなで話し合う場所1

ゲーム内の実績などをセーブするのってどうやればいいんでしょうか

ゲームをいろいろ作ってます
リクエストになんでも答えるよ
みんなぜひ僕のゲームやってみてね!
https://scratch.mit.edu/projects/909044687/ 自信作

Powered by DjangoBB