我一直有这样的想法,即使用加密来防止用户在程序本身之外的程序中找出内容。就像用户可能会发现,游戏中从未使用过的纹理意味着在浏览游戏数据时会成为某种复活节彩蛋的一部分。这可能会毁了每一个人,如果张贴在网上。
想象一个密室,玩家必须在游戏中的安全门上按下正确的数字,如果正确的话,应该生成正确的解密密钥,然后解密该级别的部分并打开门。因此,即使在查看游戏数据时也无法访问复活节彩蛋,因为密钥并没有被实际存储,而是基于用户输入生成的。
这是我想象的另一个例子。我有一个益智游戏,比方说20个级别,每个级别使用不同的密钥加密。我没有将解密密钥与程序直接存储在一起,而是允许人们对程序进行反编译并找到它,而是根据先前的谜题解决方案生成加密/解密密钥。这样的话,玩家在获得任何关于下一个级别的信息之前,甚至在查看游戏数据时,都必须真正解决这个难题。
玩家,如果知识渊博,可能会“很容易”地强迫它,因为谜题解决方案的数量可能少于解密密钥的数量。这确实是一个复杂的问题,在这里并不是很重要。虽然我确实发了一个关于它的回复,到这里来
今天有没有程序/游戏做过这样的事情?在他们的游戏中存储加密的内容?如果不是,为什么呢?在商店或国家一级,是否有很多关于这方面的规则和规章?有人看到我错过了什么明显的陷阱吗?忽略用户体验之类的东西,这个想法对我来说听起来不错,让我好奇为什么我以前没见过这样的东西。
编辑:这可能不清楚我在说什么,所以这里有一个更具体的例子。
假设我有一个函数,它接收一个20个字符的字符串,并生成一个对称密钥,可以用来加密/解密游戏中的某些内容。用户获取该内容的唯一方法是了解这20个字符并生成相同的键。此键从不直接存储,而是根据用户输入动态生成。这些字符将隐藏在游戏中,可以是书籍,对话与NPC,甚至可能在游戏之外,甚至在后面的盒子。
因此,与2*10^28可能的组合尝试,它可能会更有可能,人们将发现内容的方式,而不是通过查看游戏数据。
编辑2:在发送给使用者之前,所讨论的内容将使用任意的秘密密钥进行加密。这把钥匙显然不会随游戏一起运来。他或她将不得不在某种程度上迷惑钥匙回到一起,给出一系列的线索,根据钥匙,这是隐藏在整个游戏或其他地方。然而,这个系统对用户来说是透明的,因为除非您实际查看游戏数据,否则您不会知道内容是加密的。
正如很多人提到的,这有一个明显的缺点,即它的用例是有限的。一旦一个人搞清楚了,他/她可能会和其他人分享,如果不是关键/解决方案,那么内容本身。然而,如果你的意图是保守一些秘密以致于一个人不应该解决它,而且人们必须共同努力来解决它,或者你担心你的复活节彩蛋隐藏得太好了(从设计上),更有可能有人会在代码中找到它,而不是通过游戏。那我觉得这很管用。
我个人建议只在每次游戏中使用一次,并且只在不影响核心游戏的事情上使用,比如复活节彩蛋,秘密结局。任何谜题都必须如此复杂或隐藏起来,这样才能使人们的速度慢到足以使加密内容有价值。如果这个谜题阻碍了人们的进步,那么可能没有人会有任何乐趣。
发布于 2016-02-06 22:57:46
这个问题是问它是否有可能(不只是商业上可行的或其他解释)强迫至少一个用户解决一个难题,而不是黑客解锁某些游戏内容。
据我所知,这绝对是可能的。事实上,对我来说,其他答案是完全不可能的,即使它已经非常明确地声明密钥既不生成也不存储,只是从游戏状态读取(游戏状态可能包含可能的价值),这是很奇怪的。“游戏知道如何解密”这样就无法工作,这意味着任何开源加密/解密软件(例如,TrueCrypt)本质上都是不安全的,因为您知道如何解密容器(只需根据键盘输入字符串,对吗?)
在最简单的情况下,假设游戏本身是一个键盘模拟器,它会问“我的加密文件的密码是什么?”,显然我们都同意,拥有游戏的源代码是没有帮助的。现在想象一下游戏中的问题:“地球上最大的动物和最小动物的名字连在一起是什么名字?”难道不清楚的是,即使有游戏的源代码也不会有帮助,你还必须解决这个难题吗?
至于这是否可能,答案是绝对肯定的,这是可能的。
发布于 2016-02-06 14:32:49
已经试过了。很多很多次。有一个完整的子行业致力于试图使用加密来阻止用户访问他们认为合适的程序。但从来都不起作用。最好的保护方案通常在破解前一个月,而互联网的问题是,一旦它被破解一次,一旦有人发布它,它就会在任何地方都被破解。你忽略的一个明显的缺陷是,为了让你的程序使用这些数据,它必须包含解密数据所需的所有信息,如果计算机能够做到这一点,一个能够访问计算机的人就可以做到这一点。
它被称为“密码学的基本问题”:Alice想要向Bob发送一条信息,查理即使得到它,也无法阅读它。你提出的方法的问题是,在这种情况下,Bob和Charlie是同一个人。
我可以理解不破坏用户的愿望,但是如果人们想要破坏者,他们会找到他们,如果他们不这样做,他们将倾向于积极避免破坏者。但是,如果你真的想做一个伟大的游戏,走相反的路线:激进的开放。看看“无冬之夜”、“星际争霸”或“老涡旋”系列游戏吧,这些游戏在发行后几年都很受欢迎。他们这么做是因为他们发布了强大的游戏设计工具,允许用户挖掘一切,了解它是如何工作的,以及构建和共享他们自己的内容。一场游戏只是一场游戏,直到它变成一个社区,社区才得以生存。
发布于 2016-02-06 14:26:30
我已经有足够的时间知道,如果内容在那里,会有人找到它。让它变得更难,只会吸引更多有决心的人。你的产品越受欢迎,它就越有趣。部分原因是因为这是一个挑战,部分是因为有那么多地方你可以通过发布这样的信息获得“信誉”。
如果密钥是由游戏在本地生成的,那么您可以找到一种在游戏中作弊的方法,直到生成密钥为止,或者简单地挖出正确的代码。如果在完成游戏中的某些步骤时,从服务器发送密钥给您,有人会欺骗您的服务器,使其相信他们已经走得足够远。
最后,你的游戏将受益更多,从你花的时间使它有趣和迷人,使它很难找出下一个层次的颜色是什么。
https://softwareengineering.stackexchange.com/questions/309438
复制相似问题