acm-header
登录

ACM通信

Kode恶性

资源管理课程


乔治·v·内维尔·尼尔

乔治·v·内维尔·尼尔

回到顶部亲爱的KV

我一直在为一个高端、高性能的网卡重做一个设备驱动程序,我有一个资源分配问题。我使用的设备有几个网口,但它们并不总是在使用;事实上,我们的许多客户只使用四个可用端口中的一个。如果在设备驱动程序第一次加载到系统中时,我可以为所有端口分配资源,无论有多少,这将大大简化我的驱动程序中的逻辑,而不是每当管理员提出一个接口时处理分配问题。

我要指出的是,这个设备非常复杂,资源分配不像内存和指针的快速malloc那么简单,这个设备里面有很多活动部件。

我们并不是在谈论现代标准下的大量内存——也许是每端口1兆字节,但它仍然困扰着我,如果它没有被使用,浪费内存或任何资源。我年纪大了,记得有64千字节内存的8位计算机,编程给了我一个强烈的内在激励,永远不要浪费一个字节,更不要说兆字节了。什么时候分配可能永远不会被使用的内存是可以的,即使这可能会减少我的代码的复杂性?

害怕脚印

回到顶部

亲爱的的足迹

你问题的答案很容易。有时分配可能永远不会使用的内存是可以的,而有时分配相同的内存则是不可以的。啊,这是一个程序员的尖叫声吗?对我听到的问题没有一个非黑即白、是非分明的答案?令人愉快的!

让你我懊恼的是,软件工程是一门关于权衡的研究。时间与复杂性,权宜之计与质量——这些都是我们每天要面对的选择。对于工程师来说,周期性地重新审视他们的假设是很重要的,可能是每一年或两年一次,因为我们工作的系统在我们脚下变化得非常快。

关注他们所使用的系统的程序员——我知道我的每一个读者都在关注——已经看到这些系统在过去五年中发生了巨大的变化,就像他们在那之前的五年一样,以此类推,直到第一代计算机。虽然处理器频率缩放可能暂时暂停了(我们将看到这一时刻会持续多长时间),但内存的大小仍在继续增长。单个服务器拥有64和128兆内存的情况并不少见,这种可用内存的激增导致了一些非常糟糕的编程实践。

盲目地浪费资源(如内存)确实是愚蠢的,但在这种情况下,这不是一种工程上的权衡,这是一个示例,程序员离他们的机器太远,试图“只是让它工作”。那不是编程,那只是打字。软件工程师和程序员值得拥有昂贵的椅子和高薪,他们知道他们不想浪费资源,所以他们试图弄清楚最好的和最坏的情况是什么,以及它们将如何影响系统的其他可能用户。在大多数情况下,用户现在只是其他程序,而不是其他人,但我们都知道当系统开始将内存中的内容交换到辅助存储时,会发生什么。没错,你的DevOps员工会在凌晨3点尖叫着给你打电话尖叫的人从来没有那么有趣,除非在音乐会上。

您提到该软件是针对“高性能”设备的,如果您的意思是它适用于典型的64位服务器类机器,那么没有人真的会注意到1兆、4兆甚至8兆字节。一台高端服务器级机器的RAM不太可能少于4gb。即使您在系统启动时分配4兆字节,那也只是可用RAM 1%的十分之一。用Java编写代码的人要比启动线程的工作量大得多。你真的要担心不到十分之一的内存吗?

如果你告诉我这个驱动程序适用于某些内存大小有限的嵌入式设备,我会给出其他建议,因为该系统可能没有4GB的RAM;但话又说回来,考虑到现在大多数手机和平板电脑的功能,这可能会发生。

人们常说的“不浪费,不匮乏”是对的,但适度中节制也很重要。

KV

回到顶部

亲爱的KV,

我正在将一个Web应用程序转换为在移动平台上运行。虽然该应用程序不处理银行信息或类似的安全问题,但它仍然需要用户输入密码。我们的密码要求不是很严格,但至少有8个字符的大小,并且需要一个大写字母和一个非字母数字字符。由于屏幕上的输入非常不准确,我们的产品开发人员希望我们进一步放宽对密码的要求,允许用户拥有一个全小写的四个字符的密码,他们称之为移动PIN码。移动识别码只能在移动应用上使用,而不能在网络上使用。我已经尝试着向产品开发团队解释4个字符是远远不够的,但如果我们将其限制在手机应用中,这将是可行的。你怎么看?

固定下来

回到顶部

亲爱的别

我一直在想什么时候会有人写这样的信。在过去几年里,我在各种平板电脑上打过字,我知道,某个市场营销或产品类型的人迟早会为了方便而要求工程师简化安全问题。我很高兴你指出你的申请与银行无关,因为我必须立即回信问:“哪家银行?!”,这只会带来麻烦。

说句题外话,我确实觉得有趣的是,当人们想到安全时,他们只会想到银行。虽然有人把你银行账户里的钱都转到自己的账户里是非常糟糕的,但事实是,网上可能发生很多与现金流没有直接关系的真正糟糕的事情。弱密码会让用户容易受到身份盗窃、跟踪者、绑架者和前任的攻击。这取决于你自己去考虑哪一种情况比损失一些现金更好或更糟。我宁愿赔钱也不愿被前男友跟踪。


四字符密码的问题是它太短,很容易被猜出来。


正如你所指出的,四字符密码的问题是它太短了,很容易被猜到。使用带有PIN码的卡片,例如自动取款机上使用的卡片,是因为它需要实际拥有某种东西,即卡片,才能有效。保护在线用户的方案,例如涉及密码的方案,取决于用户提供的组合是他们拥有的东西、他们是什么东西或他们知道的东西。密码就是后者的一个例子。方案可以混合和匹配,例如PIN和物理卡,其中用户有一些东西并知道一些东西。

当前移动设备的问题是,它们处理用户输入的能力比带键盘的计算机要有限得多。屏幕上的键盘不是很好,这可能就是为什么谷歌的某些人认为在Android上使用一种模式来解锁设备。我发现这个系统有点愚蠢,很容易被人忽视,但看到有人尝试做一些不同的事情是件好事。

假设设备本身是用户拥有的某种东西的证明,这是很好的,但由于密码的目的是防止恶意方在设备丢失或被盗后访问用户的数据,因此它需要足够强大,以阻止攻击者。如果您无法克服密码的复杂性,那么是时候打破锁定选项了。如果您允许攻击者多次尝试猜出pin,那么四位数的pin码就会成为一个大问题。如果,在三次尝试后,你锁定用户五分钟,然后让用户再次尝试,攻击者将需要很长时间来尝试足够多的PIN,以猜出正确的PIN,也就是说,如果用户没有选择一个常见的PIN,如1234或2580(读者的一个练习是弄清楚为什么第二个代码是如此常见;更多关于pin问题的学术研究见论文《每11个钱包就有一份生日礼物?》“客户选择的银行pin的安全性”,由剑桥大学计算机实验室的Joseph Bonneau等人http://www.jbonneau.com/doc/BPA12-FC-banking_pin_security.pdf).

作为我这样的人,我也喜欢三次失败的尝试导致设备完全不能工作的想法,包括删除所有本地数据,然后要求用户经历一个不涉及设备的恢复流程。如果使用您的应用程序的人通常在某种程度上有精神障碍(不,我不是指他们是上层管理人员,我指的是用于社交网络时),那么烦人的恢复系统将无法通过您的产品开发人员的审核。太多的人想要上传他们朋友的照片,而这,唉,需要牺牲安全。

KV

ACM队列的q戳相关文章
queue.acm.org

低功耗软件
埃里克·萨克斯
http://queue.acm.org/detail.cfm?id=1698225

网络虚拟化:打破性能障碍
苏格兰人Rixner
http://queue.acm.org/detail.cfm?id=1348592

科德·维瑟斯:医生来了
乔治Neville-Neil
http://queue.acm.org/detail.cfm?id=1105672

回到顶部

作者

乔治·v·内维尔·尼尔kv@acm.org)是Neville-Neil Consulting的东主及ACM队列编辑委员会。他从事网络和操作系统代码方面的工作,教授各种与编程相关的课程,并鼓励您的评论、俏皮话和与他相关的代码片段通信列。


版权归版权人/作者所有。

数字图书馆是由计算机协会出版的。版权所有©2013 ACM, Inc.

Baidu
map