Discuss Scratch
- inoking
- Scratcher
1000+ posts
セーブコードについてみんなで話し合う場所1
というわけで #74 にもあるように
このトピックの目的をもう少し絞り込んだほうが良いのではないか思います。
・「復活の呪文」のようなことをやりたい?
・そのときのチートを防ぎたい?
・対象はローカル実行含めたすべて?
・それとも暗号化の話をしたい?
このトピックの目的をもう少し絞り込んだほうが良いのではないか思います。
・「復活の呪文」のようなことをやりたい?
・そのときのチートを防ぎたい?
・対象はローカル実行含めたすべて?
・それとも暗号化の話をしたい?
これは署名と呼ばれるもので投稿本文とは関係ありません。
Scratch は「世界最大の子ども向けコーディングコミュニティーで、シンプルなビジュアルインターフェースを持ったコーディング言語」
つまり「子ども SNS」として遊ぶためのものではない
・「『報告乱用された』それは間違いです。Scratch チームは問題のない作品を手動で非共有にすることはありません。」※自動の場合は「多数報告された」というメッセージあり
・「傾向」とは単に一定の基準で作品を並びかえただけのもので、ランキングでもなんでもない、ナンバーワンよりオンリーワンを目指してみては?
・「フォロー」とは他の Scratcher が何をしているかを簡単に確認するためのもので、「フォロワー」は「ファン」ではない
・「スタジオ」とは特定のテーマに沿って作品をまとめたり、共同制作したりするための場所
・「星」や「ハート」などを何かの見返りとすることは Scratch チームによって禁止されている
- kunisan19go
- Scratcher
100+ posts
セーブコードについてみんなで話し合う場所1
なるほど例えば、HP100 MP50 お金600 の状態でセーブをしたとき、 なんでセーブコードって暗号化するの?100/50/600のようにセーブコードにするとします。
ロードするときに、これをそのまま入力すれば、同じ状態から再開できるわけです。
しかし、数値を見て、どの場所にある数値が何のステータスか大体予想できませんか?
そこで、ロードするときに、500/500/10000と入力してみましょう。
プログラムは、これが改ざんされた数値かを検出できないので、そのままロードします。
ずるができるわけです。
それを阻止するために、セーブコードを出力するときに暗号化して、どこがどのステータスに対応しているかわからなくするのが暗号化です。
- choriss55
- Scratcher
100+ posts
セーブコードについてみんなで話し合う場所1
①中を見なければ解読できないレベルのセーブコードを生成
②ユーザー名をコード化する(A→01,B→02など)(A→89,B→42とランダムでもなんでも)
③オーバーフロー対策掛け算を使って①と②を掛け算して
④最後に③を111や999などで割ったりしてチェックデジットを③の後に付け加えれば
その人しか使えないし多少読まれて改ざんされてもチェックデジットが違ったりしたら不正を出せばチートは防げるかな。
②ユーザー名をコード化する(A→01,B→02など)(A→89,B→42とランダムでもなんでも)
③オーバーフロー対策掛け算を使って①と②を掛け算して
④最後に③を111や999などで割ったりしてチェックデジットを③の後に付け加えれば
その人しか使えないし多少読まれて改ざんされてもチェックデジットが違ったりしたら不正を出せばチートは防げるかな。
とある高等教育機関で制御情報工学を学んでいます
- NT_ZZzz
- Scratcher
100+ posts
セーブコードについてみんなで話し合う場所1
不正なセーブコードを使用する方法として 主に
1.不正な状況でセーブをする(出力の不正)
2.自力でセーブコードを作成する(入力の不正)
の2つがあると考えられます
どちらも「中を見る」により行われるため、クラウド変数にセーブすることで対策ができます
入力の不正は中を見なくてもできなくはないかもしれない
そもそもユーザーにコードを渡す時点で改竄を防げる気がしないのですが
「ユーザーがセーブコードを改変できる」状態で
改竄を防ぐことは可能なのでしょうか?全く方法が思いつきません
1.不正な状況でセーブをする(出力の不正)
2.自力でセーブコードを作成する(入力の不正)
の2つがあると考えられます
どちらも「中を見る」により行われるため、クラウド変数にセーブすることで対策ができます
入力の不正は中を見なくてもできなくはないかもしれない
そもそもユーザーにコードを渡す時点で改竄を防げる気がしないのですが
「ユーザーがセーブコードを改変できる」状態で
改竄を防ぐことは可能なのでしょうか?全く方法が思いつきません
競技プログラミングをやろう!処理速度を意識するとちょっと便利なことがあるかも!
ところで貴方が読んでるこの署名なんですけど、まだ進化を残してるらしいです。
とりあえずBBCodeを履修してからですね。進化はまだ遠いっぽいです。
ネコミミアイコンって いいなあ かわいい (心の俳句?)
そうだ、ScratchでScratch作ろう(唐突な大目標の提示はScratch歴5年の特権)(別にそうでもない)
しりとり→リスト リストの話します。 リストは便利だし使いやすい(←同じことじゃない?) 積極的に活用しよう!
リスト→トマト トマトが赤くなると医者が青くなる。医者が青くなったら桶屋が儲かる。桶屋はいつも儲かってる。
トマト→徳政令 徳政令カードが0円で買えるようになったよ!借金があったら近くのカード売り場に行こう!
徳政令→冷蔵庫 冷蔵庫は寒いと思っていませんか?実は排熱で温かいんですね。
冷蔵庫→コイン 硬貨はcoin、では紙幣は? billとかnoteとかpaper money(そのまんま)とか
- inoking
- Scratcher
1000+ posts
セーブコードについてみんなで話し合う場所1
先に書いたように、
ロード処理を作った時点で改ざんによるチートは容易です。
ただ、クラウド変数を使うことにより
プログラムが改ざんされていないことの確認はできるでしょう。
あらためて、
何を防ぎたいかを明確にしたほうがよいと思います。
なお、
可読性を落とすために変数名を変えるといったことは想定していません。
ロード処理を作った時点で改ざんによるチートは容易です。
ただ、クラウド変数を使うことにより
プログラムが改ざんされていないことの確認はできるでしょう。
あらためて、
何を防ぎたいかを明確にしたほうがよいと思います。
なお、
可読性を落とすために変数名を変えるといったことは想定していません。
これは署名と呼ばれるもので投稿本文とは関係ありません。
Scratch は「世界最大の子ども向けコーディングコミュニティーで、シンプルなビジュアルインターフェースを持ったコーディング言語」
つまり「子ども SNS」として遊ぶためのものではない
・「『報告乱用された』それは間違いです。Scratch チームは問題のない作品を手動で非共有にすることはありません。」※自動の場合は「多数報告された」というメッセージあり
・「傾向」とは単に一定の基準で作品を並びかえただけのもので、ランキングでもなんでもない、ナンバーワンよりオンリーワンを目指してみては?
・「フォロー」とは他の Scratcher が何をしているかを簡単に確認するためのもので、「フォロワー」は「ファン」ではない
・「スタジオ」とは特定のテーマに沿って作品をまとめたり、共同制作したりするための場所
・「星」や「ハート」などを何かの見返りとすることは Scratch チームによって禁止されている
- choriss55
- Scratcher
100+ posts
セーブコードについてみんなで話し合う場所1
違う方法で書いたセーブコードをいくつもつなげる
とある高等教育機関で制御情報工学を学んでいます
- watashida
- Scratcher
500+ posts
セーブコードについてみんなで話し合う場所1
私も比較的強いクラウド変数を用いたチート対策を考えたことがあります。
ハッシュ関数を使うことである程度多くの人数のデータを保存することができます。
ハッシュ長を16桁とすればセーブできる人数は160人で衝突する可能性もかなり小さくできます。
とすることでプレイヤーにセーブデータを保管させ、クラウド変数にそのハッシュを保管します。 セーブデータ = 単純なセーブデータ
(セーブデータ) を表示する
ハッシュ = hash(セーブデータ)
(クラウドリスト) に (ハッシュ) を追加する
セーブデータを偽造した場合クラウドリストにハッシュが入っていないため、そのことを検知することができます。 セーブデータ = 入力(セーブデータ)
ハッシュ = hash(セーブデータ)
もし (ハッシュ) が (クラウドリスト) に入っているなら
(クラウドリスト) から (ハッシュ) を削除する
(成功) を表示する
でなければ
(失敗) を表示する
ハッシュ関数を使うことである程度多くの人数のデータを保存することができます。
ハッシュ長を16桁とすればセーブできる人数は160人で衝突する可能性もかなり小さくできます。
機械学習たーのしー!わーい!
- RITORUDX3
- Scratcher
27 posts
セーブコードについてみんなで話し合う場所1
クラウドリストはどうやって作るんですか?リストにクラウド機能はないと思うんですが… 私も比較的強いクラウド変数を用いたチート対策を考えたことがあります。とすることでプレイヤーにセーブデータを保管させ、クラウド変数にそのハッシュを保管します。 セーブデータ = 単純なセーブデータ
(セーブデータ) を表示する
ハッシュ = hash(セーブデータ)
(クラウドリスト) に (ハッシュ) を追加するセーブデータを偽造した場合クラウドリストにハッシュが入っていないため、そのことを検知することができます。 セーブデータ = 入力(セーブデータ)
ハッシュ = hash(セーブデータ)
もし (ハッシュ) が (クラウドリスト) に入っているなら
(クラウドリスト) から (ハッシュ) を削除する
(成功) を表示する
でなければ
(失敗) を表示する
ハッシュ関数を使うことである程度多くの人数のデータを保存することができます。
ハッシュ長を16桁とすればセーブできる人数は160人で衝突する可能性もかなり小さくできます。
- YY04
- Scratcher
100+ posts
セーブコードについてみんなで話し合う場所1
「ハッシュ」って、バーコードにも使われているやつですよね。 私も比較的強いクラウド変数を用いたチート対策を考えたことがあります。とすることでプレイヤーにセーブデータを保管させ、クラウド変数にそのハッシュを保管します。 セーブデータ = 単純なセーブデータ
(セーブデータ) を表示する
ハッシュ = hash(セーブデータ)
(クラウドリスト) に (ハッシュ) を追加するセーブデータを偽造した場合クラウドリストにハッシュが入っていないため、そのことを検知することができます。 セーブデータ = 入力(セーブデータ)
ハッシュ = hash(セーブデータ)
もし (ハッシュ) が (クラウドリスト) に入っているなら
(クラウドリスト) から (ハッシュ) を削除する
(成功) を表示する
でなければ
(失敗) を表示する
ハッシュ関数を使うことである程度多くの人数のデータを保存することができます。
ハッシュ長を16桁とすればセーブできる人数は160人で衝突する可能性もかなり小さくできます。
いろいろ計算した結果、ハッシュ値と同じになったかで偽造を防ぐっていう…
受験勉強中のため、活動休止(減少)しています。…といいつつ実はたまに作品上げてたりする。
要件はこちらに。
<おすすめプロジェクトランキング>
1.Minecraft実況 ~全実績解除を目指して~ 再生リスト ←参照数増加中!!
2.仮想世界地図←主力事業
3.デジタル時計←自信作
- choriss55
- Scratcher
100+ posts
セーブコードについてみんなで話し合う場所1
準備 クラウドリストはどうやって作るんですか?リストにクラウド機能はないと思うんですが…
①クラウド変数を作ります
②漢字やひらがなはチャット機能とみなされてしまうのでアルファベットと数字、アカウントに使える記号をかき出します
③その文字一つ一つをリストに入れます(これはクラウドリストではない)
④改行コードは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 と同様なことを考えていました。
それ以前に、
セーブデータをすべてクラウドに保存してしまえばそれで事足りますけどね。
誰かがどこかで同じプロジェクトを実行している必要はありますが
「作品を開いている間に別のアカウントがクラウド変数を操作すること」を確認すれば
エディター画面で操作されていないことは保証できます。
そのうえで、チート対策として
私も今日デジタル署名の方式で #92 と同様なことを考えていました。
でもハッシュで十分ですね。とすることでプレイヤーにセーブデータと公開鍵を保管させ、クラウド変数にその公開鍵を保管します。 セーブデータ = 秘密鍵で暗号化
(セーブデータ) と (公開鍵) を表示する
(クラウドリスト) に (公開鍵) を追加するセーブデータを偽造した場合クラウドリストに公開鍵が入っていないため、そのことを検知することができます。 セーブデータ = 入力(セーブデータ)
公開鍵 = 入力(公開鍵)
もし (公開鍵) が (クラウドリスト) に入っているなら
(クラウドリスト) から (公開鍵) を削除する?
(成功) を表示する
(セーブデータ) を公開鍵で復号化
でなければ
(失敗) を表示する
クラウドが公開鍵の認証局の役割を果たすわけです。
それ以前に、
セーブデータをすべてクラウドに保存してしまえばそれで事足りますけどね。
これは署名と呼ばれるもので投稿本文とは関係ありません。
Scratch は「世界最大の子ども向けコーディングコミュニティーで、シンプルなビジュアルインターフェースを持ったコーディング言語」
つまり「子ども SNS」として遊ぶためのものではない
・「『報告乱用された』それは間違いです。Scratch チームは問題のない作品を手動で非共有にすることはありません。」※自動の場合は「多数報告された」というメッセージあり
・「傾向」とは単に一定の基準で作品を並びかえただけのもので、ランキングでもなんでもない、ナンバーワンよりオンリーワンを目指してみては?
・「フォロー」とは他の Scratcher が何をしているかを簡単に確認するためのもので、「フォロワー」は「ファン」ではない
・「スタジオ」とは特定のテーマに沿って作品をまとめたり、共同制作したりするための場所
・「星」や「ハート」などを何かの見返りとすることは Scratch チームによって禁止されている
- RITORUDX3
- Scratcher
27 posts
セーブコードについてみんなで話し合う場所1
改行コードとかって何ですかね?作品を見てみてもあんまりわからなくて…準備 クラウドリストはどうやって作るんですか?リストにクラウド機能はないと思うんですが…
①クラウド変数を作ります
②漢字やひらがなはチャット機能とみなされてしまうのでアルファベットと数字、アカウントに使える記号をかき出します
③その文字一つ一つをリストに入れます(これはクラウドリストではない)
④改行コードは00とします
コード化
①コード化したい文字数だけ繰り返す
コード化させたい文字を準備の時にリストにぶち込んだ文字の中から探します
②①の結果をクラウド変数につなげます(改行させたいところに00を入れます)
戻す
①00だったら新しい箱を作ったり01だったら準備で作ったリストから探します
※2文字ずつ読み込みます
詳しくはここ
- inoking
- Scratcher
1000+ posts
セーブコードについてみんなで話し合う場所1
#97そうですね。どのくらいのデータをセーブしたいかによるかと。。
でもセーブデータをそのまま上げる方式だとユーザーネームだけで20文字を使うので容量が大きくなっちゃいませんか?
これは署名と呼ばれるもので投稿本文とは関係ありません。
Scratch は「世界最大の子ども向けコーディングコミュニティーで、シンプルなビジュアルインターフェースを持ったコーディング言語」
つまり「子ども SNS」として遊ぶためのものではない
・「『報告乱用された』それは間違いです。Scratch チームは問題のない作品を手動で非共有にすることはありません。」※自動の場合は「多数報告された」というメッセージあり
・「傾向」とは単に一定の基準で作品を並びかえただけのもので、ランキングでもなんでもない、ナンバーワンよりオンリーワンを目指してみては?
・「フォロー」とは他の Scratcher が何をしているかを簡単に確認するためのもので、「フォロワー」は「ファン」ではない
・「スタジオ」とは特定のテーマに沿って作品をまとめたり、共同制作したりするための場所
・「星」や「ハート」などを何かの見返りとすることは Scratch チームによって禁止されている