Discuss Scratch

inoking
Scratcher
1000+ posts

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

というわけで #74 にもあるように
このトピックの目的をもう少し絞り込んだほうが良いのではないか思います。
・「復活の呪文」のようなことをやりたい?
・そのときのチートを防ぎたい?
・対象はローカル実行含めたすべて?
・それとも暗号化の話をしたい?

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

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

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

matunyan0930 wrote:

kunisan19go wrote:

なんでセーブコードって暗号化するの?
例えば、HP100 MP50 お金600 の状態でセーブをしたとき、
100/50/600
のようにセーブコードにするとします。
ロードするときに、これをそのまま入力すれば、同じ状態から再開できるわけです。
しかし、数値を見て、どの場所にある数値が何のステータスか大体予想できませんか?
そこで、ロードするときに、
500/500/10000
と入力してみましょう。
プログラムは、これが改ざんされた数値かを検出できないので、そのままロードします。
ずるができるわけです。
それを阻止するために、セーブコードを出力するときに暗号化して、どこがどのステータスに対応しているかわからなくするのが暗号化です。
なるほど
choriss55
Scratcher
100+ posts

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

inoking wrote:

というわけで #74 にもあるように
このトピックの目的をもう少し絞り込んだほうが良いのではないか思います。
・「復活の呪文」のようなことをやりたい?
・そのときのチートを防ぎたい?
・対象はローカル実行含めたすべて?
・それとも暗号化の話をしたい?
とりあえず今は上から二番目のチートを防ぐということで話を進めていこうかなと思います

とある高等教育機関で制御情報工学を学んでいます
choriss55
Scratcher
100+ posts

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

①中を見なければ解読できないレベルのセーブコードを生成
②ユーザー名をコード化する(A→01,B→02など)(A→89,B→42とランダムでもなんでも)
③オーバーフロー対策掛け算を使って①と②を掛け算して
④最後に③を111や999などで割ったりしてチェックデジットを③の後に付け加えれば

その人しか使えないし多少読まれて改ざんされてもチェックデジットが違ったりしたら不正を出せばチートは防げるかな。

とある高等教育機関で制御情報工学を学んでいます
choriss55
Scratcher
100+ posts

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

#1更新しました

Last edited by choriss55 (Oct. 20, 2019 09:39:49)


とある高等教育機関で制御情報工学を学んでいます
NT_ZZzz
Scratcher
100+ posts

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

不正なセーブコードを使用する方法として 主に
1.不正な状況でセーブをする(出力の不正)
2.自力でセーブコードを作成する(入力の不正)
の2つがあると考えられます
どちらも「中を見る」により行われるため、クラウド変数にセーブすることで対策ができます
入力の不正は中を見なくてもできなくはないかもしれない
そもそもユーザーにコードを渡す時点で改竄を防げる気がしないのですが
「ユーザーがセーブコードを改変できる」状態で
改竄を防ぐことは可能なのでしょうか?全く方法が思いつきません

競技プログラミングをやろう!処理速度を意識するとちょっと便利なことがあるかも!
ところで貴方が読んでるこの署名なんですけど、まだ進化を残してるらしいです。
とりあえずBBCodeを履修してからですね。進化はまだ遠いっぽいです。
ネコミミアイコンって いいなあ かわいい (心の俳句?)
そうだ、ScratchでScratch作ろう(唐突な大目標の提示はScratch歴5年の特権)(別にそうでもない)
しりとり→リスト リストの話します。 リストは便利だし使いやすい(←同じことじゃない?) 積極的に活用しよう!
リスト→トマト トマトが赤くなると医者が青くなる。医者が青くなったら桶屋が儲かる。桶屋はいつも儲かってる。
トマト→徳政令 徳政令カードが0円で買えるようになったよ!借金があったら近くのカード売り場に行こう!
徳政令→冷蔵庫 冷蔵庫は寒いと思っていませんか?実は排熱で温かいんですね。
冷蔵庫→コイン 硬貨はcoin、では紙幣は? billとかnoteとかpaper money(そのまんま)とか
inoking
Scratcher
1000+ posts

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

先に書いたように、
ロード処理を作った時点で改ざんによるチートは容易です。
ただ、クラウド変数を使うことにより
プログラムが改ざんされていないことの確認はできるでしょう。

あらためて、
何を防ぎたいかを明確にしたほうがよいと思います。

なお、
可読性を落とすために変数名を変えるといったことは想定していません。

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

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

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

違う方法で書いたセーブコードをいくつもつなげる

とある高等教育機関で制御情報工学を学んでいます
kunisan19go
Scratcher
100+ posts

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

数字をアルファベットに変える
RITORUDX3
Scratcher
27 posts

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

チートを防ぐのにクラウドセーブを使うのは容易なのでしょうか…?
クラウド変数でセーブするという方法があんまりわかりません…

自分の作品の中で一番人気あるやつ

あ!こんなところに!2018年3月29日に公開した自分の作品の中では人気あるけど他の人の人気の作品に比べたらあんまり人気ない奴だ!見ないと!
自分のサイトも見てね
その他情報
クリッカーを寄せ集めるスタジオ②コラボ(最新版)③コラボのフォーラム(スタジオ)④RPG(未完成&開発中)
kunisan19go
Scratcher
100+ posts

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

このセーブコード暗号化するようにした
ただしこれでしか使えない
watashida
Scratcher
500+ posts

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

私も比較的強いクラウド変数を用いたチート対策を考えたことがあります。

セーブ wrote:

セーブデータ = 単純なセーブデータ
(セーブデータ) を表示する
ハッシュ = hash(セーブデータ)
(クラウドリスト) に (ハッシュ) を追加する
とすることでプレイヤーにセーブデータを保管させ、クラウド変数にそのハッシュを保管します。

ロード wrote:

セーブデータ = 入力(セーブデータ)
ハッシュ = hash(セーブデータ)
もし (ハッシュ) が (クラウドリスト) に入っているなら
 (クラウドリスト) から (ハッシュ) を削除する
 (成功) を表示する
でなければ
 (失敗) を表示する
セーブデータを偽造した場合クラウドリストにハッシュが入っていないため、そのことを検知することができます。

ハッシュ関数を使うことである程度多くの人数のデータを保存することができます。
ハッシュ長を16桁とすればセーブできる人数は160人で衝突する可能性もかなり小さくできます。

機械学習たーのしー!わーい!
RITORUDX3
Scratcher
27 posts

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

watashida wrote:

私も比較的強いクラウド変数を用いたチート対策を考えたことがあります。

セーブ wrote:

セーブデータ = 単純なセーブデータ
(セーブデータ) を表示する
ハッシュ = hash(セーブデータ)
(クラウドリスト) に (ハッシュ) を追加する
とすることでプレイヤーにセーブデータを保管させ、クラウド変数にそのハッシュを保管します。

ロード wrote:

セーブデータ = 入力(セーブデータ)
ハッシュ = hash(セーブデータ)
もし (ハッシュ) が (クラウドリスト) に入っているなら
 (クラウドリスト) から (ハッシュ) を削除する
 (成功) を表示する
でなければ
 (失敗) を表示する
セーブデータを偽造した場合クラウドリストにハッシュが入っていないため、そのことを検知することができます。

ハッシュ関数を使うことである程度多くの人数のデータを保存することができます。
ハッシュ長を16桁とすればセーブできる人数は160人で衝突する可能性もかなり小さくできます。
クラウドリストはどうやって作るんですか?リストにクラウド機能はないと思うんですが…

自分の作品の中で一番人気あるやつ

あ!こんなところに!2018年3月29日に公開した自分の作品の中では人気あるけど他の人の人気の作品に比べたらあんまり人気ない奴だ!見ないと!
自分のサイトも見てね
その他情報
クリッカーを寄せ集めるスタジオ②コラボ(最新版)③コラボのフォーラム(スタジオ)④RPG(未完成&開発中)
YY04
Scratcher
100+ posts

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

watashida wrote:

私も比較的強いクラウド変数を用いたチート対策を考えたことがあります。

セーブ wrote:

セーブデータ = 単純なセーブデータ
(セーブデータ) を表示する
ハッシュ = hash(セーブデータ)
(クラウドリスト) に (ハッシュ) を追加する
とすることでプレイヤーにセーブデータを保管させ、クラウド変数にそのハッシュを保管します。

ロード wrote:

セーブデータ = 入力(セーブデータ)
ハッシュ = hash(セーブデータ)
もし (ハッシュ) が (クラウドリスト) に入っているなら
 (クラウドリスト) から (ハッシュ) を削除する
 (成功) を表示する
でなければ
 (失敗) を表示する
セーブデータを偽造した場合クラウドリストにハッシュが入っていないため、そのことを検知することができます。

ハッシュ関数を使うことである程度多くの人数のデータを保存することができます。
ハッシュ長を16桁とすればセーブできる人数は160人で衝突する可能性もかなり小さくできます。
「ハッシュ」って、バーコードにも使われているやつですよね。
いろいろ計算した結果、ハッシュ値と同じになったかで偽造を防ぐっていう…

受験勉強中のため、活動休止(減少)しています。…といいつつ実はたまに作品上げてたりする。
要件はこちらに。

<おすすめプロジェクトランキング>
1.Minecraft実況 ~全実績解除を目指して~ 再生リスト ←参照数増加中!!
2.仮想世界地図主力事業
3.デジタル時計自信作

choriss55
Scratcher
100+ posts

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

RITORUDX3 wrote:

クラウドリストはどうやって作るんですか?リストにクラウド機能はないと思うんですが…
準備
①クラウド変数を作ります
②漢字やひらがなはチャット機能とみなされてしまうのでアルファベットと数字、アカウントに使える記号をかき出します
③その文字一つ一つをリストに入れます(これはクラウドリストではない)
④改行コードは00とします

コード化
①コード化したい文字数だけ繰り返す
 コード化させたい文字を準備の時にリストにぶち込んだ文字の中から探します
②①の結果をクラウド変数につなげます(改行させたいところに00を入れます)

戻す
①00だったら新しい箱を作ったり01だったら準備で作ったリストから探します
※2文字ずつ読み込みます

詳しくはここ




とある高等教育機関で制御情報工学を学んでいます
choriss55
Scratcher
100+ posts

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

削除

Last edited by choriss55 (Oct. 17, 2019 11:02:24)


とある高等教育機関で制御情報工学を学んでいます
inoking
Scratcher
1000+ posts

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

プログラムの改ざん回避については
誰かがどこかで同じプロジェクトを実行している必要はありますが
「作品を開いている間に別のアカウントがクラウド変数を操作すること」を確認すれば
エディター画面で操作されていないことは保証できます。

そのうえで、チート対策として
私も今日デジタル署名の方式で #92 と同様なことを考えていました。

セーブ wrote:

セーブデータ = 秘密鍵で暗号化
(セーブデータ) と (公開鍵) を表示する
(クラウドリスト) に (公開鍵) を追加する
とすることでプレイヤーにセーブデータと公開鍵を保管させ、クラウド変数にその公開鍵を保管します。

ロード wrote:

セーブデータ = 入力(セーブデータ)
公開鍵 = 入力(公開鍵)
もし (公開鍵) が (クラウドリスト) に入っているなら
 (クラウドリスト) から (公開鍵) を削除する?
 (成功) を表示する
 (セーブデータ) を公開鍵で復号化
でなければ
 (失敗) を表示する
セーブデータを偽造した場合クラウドリストに公開鍵が入っていないため、そのことを検知することができます。
クラウドが公開鍵の認証局の役割を果たすわけです。
でもハッシュで十分ですね。

それ以前に、
セーブデータをすべてクラウドに保存してしまえばそれで事足りますけどね。

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

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

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

choriss55 wrote:

RITORUDX3 wrote:

クラウドリストはどうやって作るんですか?リストにクラウド機能はないと思うんですが…
準備
①クラウド変数を作ります
②漢字やひらがなはチャット機能とみなされてしまうのでアルファベットと数字、アカウントに使える記号をかき出します
③その文字一つ一つをリストに入れます(これはクラウドリストではない)
④改行コードは00とします

コード化
①コード化したい文字数だけ繰り返す
 コード化させたい文字を準備の時にリストにぶち込んだ文字の中から探します
②①の結果をクラウド変数につなげます(改行させたいところに00を入れます)

戻す
①00だったら新しい箱を作ったり01だったら準備で作ったリストから探します
※2文字ずつ読み込みます

詳しくはここ



改行コードとかって何ですかね?作品を見てみてもあんまりわからなくて…

自分の作品の中で一番人気あるやつ

あ!こんなところに!2018年3月29日に公開した自分の作品の中では人気あるけど他の人の人気の作品に比べたらあんまり人気ない奴だ!見ないと!
自分のサイトも見てね
その他情報
クリッカーを寄せ集めるスタジオ②コラボ(最新版)③コラボのフォーラム(スタジオ)④RPG(未完成&開発中)
watashida
Scratcher
500+ posts

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

#97
でもセーブデータをそのまま上げる方式だとユーザーネームだけで20文字を使うので容量が大きくなっちゃいませんか?

Last edited by watashida (Oct. 17, 2019 11:12:36)


機械学習たーのしー!わーい!
inoking
Scratcher
1000+ posts

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

watashida wrote:

#97
でもセーブデータをそのまま上げる方式だとユーザーネームだけで20文字を使うので容量が大きくなっちゃいませんか?
そうですね。どのくらいのデータをセーブしたいかによるかと。。

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

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

Powered by DjangoBB