线程惊群
惊群效应(thundering herd)是指多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群效应。
性能影响
Linux内核对用户进程(线程)频繁地做无效的调度、上下文切换等使系统性能大打折扣。上下文切换(context switch)过高会导致CPU像个搬运工,频繁地在寄存器和运行队列之间奔波,更多的时间花在了进程(线程)切换,而不是在真正工作的进程(线程)上面。
代码示例
在一段无缓存则请求数据库的代码中,当高并发时只有一个线程能获取到锁,其他线程都休眠1秒,1秒后可能有成千上百个线程从休眠中被唤醒来争夺锁,但也只有一个线程能获取到锁,其他线程又继续休眠等待。
123456789101112131415161718public String getData2(String keywords) throws InterruptedE ...
当我们观察到大规模群体中的社会行为时,常常能够发现一种有趣的现象,这就是所谓的惊群效应(Herd
Effect)。这个现象描述了一个特定的行为模式,即当一部分个体采取行动或做出决策后,其他个体会迅速模仿或跟随,而不是基于个体的独立信息或思考来做决策。这种现象在不同的领域和情境中都有出现,包括金融市场、社交媒体、投票和消费行为。本文将深入探讨惊群效应的特点、例子以及它在各个领域的应用。
特点和机制
惊群效应的核心特点是社会群体中的随从行为。当某个群体中的个体面临决策时,他们往往更愿意模仿或跟随已经采取行动的个体,而不是依靠个人的信息和判断。这种行为可以在理性的情况下发生,但通常是情感和社会压力的结果。当一个人看到其他人采取某种行动时,他们可能会感到更安全,因此也选择采取同样的行动。
应用领域
金融市场:在金融市场中,惊群效应可能导致过度的价格波动和泡沫。当某支股票的价格开始上涨时,投资者可能会跟随购买,导致股价进一步上涨,而不考虑公司的基本面。反之,当某支股票的价格开始下跌时,投资者可能会跟随抛售,引发恶性循环。
社交媒体:社交媒体平台是惊群效应的温床。当某个话题或趋势在社交媒体上迅速 ...
目前我们在编程中经常会使用随机数,但是其中会不会存在什么问题呢?要知道
CPU
计算中的各种状态都是确定的,在其中的随机数不是凭空产生的,所以这种随机数真的随机吗?目前生成随机数的方式主要分为以下几种:
硬件随机数生成器
利用现有硬件,从非预期方式产生随机数(比如利用音频的产生、硬盘寻址时间等)
伪随机数
量子技术
RDRAND 指令产生的随机数目前存在争议,在此不做详细讨论。有兴趣可以参考
RdRand
虽然选择很多,但是目前还是主要采用伪随机数的方式来应对实际开发中需要的场景。用于产生这些看起来随机但实际是由确定性算法生成数字的机制被称为”伪随机数发生器”,简称为
PRNG。 PRNG
的中心是确定的,如果攻击者知道其内部的完整状态,则可以对未来的值和过去的值进行预测。如果
PRNG 被用于加密密钥、生成证书等场景,就会出现安全问题。
接下来我将详细讲解对线性同余发生器的攻击。
线性同余生成器(LCG)
线性同余方法
线性同余方法(LCG)是个产生伪随机数的方法。 它是根据递归公式: 其中
A,B,M 是产生器设定的常数。 LCG 的周期最大为 M,但大部分情况都会少于
M。 ...
LCG 算法
LCG(linear congruential
generator)线性同余算法,是一个古老的产生随机数的算法。由以下参数组成:
LCG
算法是如下的一个递推公式,每下一个随机数是当前随机数向左移动 log2 a
位,加上一个 c,最后对 m 取余,使随机数限制在 0 ~ m-1 内
从该式可以看出,该算法由于构成简单,具有以下优点:
计算速度快
易于实现
易于写入硬件
以下是针对不同参数 lcg 产生随机数的效果图
可以看出,针对不同的参数,lcg 产生的效果差别很大
以下是针对不同环境下的参数选择
解题模式 - Jeopardy
解题模式(Jeopardy)常见于线上选拔比赛。在解题模式 CTF
赛制中,参赛队伍可以通过互联网或者现场网络参与,参数队伍通过与在线环境交互或文件离线分析,解决网络安全技术挑战获取相应分值,类似于
ACM 编程竞赛、信息学奥林匹克赛,根据总分和时间来进行排名。
不同的是这个解题模式一般会设置 一血 、 二血 、 三血 ,也即最先完成的前三支队伍会获得额外分值,所以这不仅是对首先解出题目的队伍的分值鼓励,也是一种团队能力的间接体现。
当然还有一种流行的计分规则是设置每道题目的初始分数后,根据该题的成功解答队伍数,来逐渐降低该题的分值,也就是说如果解答这道题的人数越多,那么这道题的分值就越低。最后会下降到一个保底分值后便不再下降。
题目类型主要包含 Web 网络攻防 、 RE
逆向工程 、 Pwn
二进制漏洞利用 、 Crypto
密码攻击 、 Mobile 移动安全 以及 Misc
安全杂项 这六个类别。
战争分享模式 - Belluminar
在 2016 年世界黑客大师挑战赛(WCTF)国内首次引入韩国 POC SECURITY
团队开创的 BELL ...
网络安全已经成为了一个备受关注的话题。随着互联网的普及,网络犯罪和安全漏洞的威胁也在不断增加。为了提高网络安全水平,培养更多的安全专业人才,CTF(Capture
The Flag)比赛应运而生,成为了网络安全领域的一项重要活动。
什么是 CTF?
CTF
比赛是一种网络安全竞赛和训练的形式,旨在考验参赛者在信息安全领域的技能。这些比赛通常包括各种类型的挑战,如网络攻防、逆向工程、加密学、Web
应用程序安全、二进制漏洞分析等。参赛者的任务是解决这些挑战,以获取称为“Flag”的标志性标识,这些标识证明他们已成功攻克了特定的安全难题或系统漏洞。
CTF 的来源
CTF
比赛的起源可以追溯到计算机安全社区,最早由一些安全研究人员和黑客组织举办。这些比赛旨在模拟实际的网络攻击和防御场景,以促进网络安全技术的发展。随着时间的推移,CTF
比赛逐渐演变成了一项备受欢迎的竞技活动,吸引了越来越多的参赛者和赞助商的支持。
CTF 的类型
CTF
比赛有多种类型,包括线上赛、线下赛、定向赛和综合赛。线上赛允许参赛者通过互联网参加,而线下赛需要参赛者亲临现场。定向赛侧重特定领域的挑战,例如硬件安全或取 ...
什么是 CTF(夺旗)活动?
如果您刚刚开始学习很酷的黑客知识,您可能会对 CTF 感到好奇。CTF
代表“夺旗”。在网络安全领域,CTF
是一种动手学习黑客技能的有趣方式。您可能想知道所有的炒作都是关于什么的。在哪里可以了解
CTF?CTF 期间会发生什么? CTF(Capture The
Flag,夺旗赛)起源于 1996 年 DEFCON
全球黑客大会,是网络安全爱好者之间的竞技游戏。CTF
是基于信息安全的不同挑战或方面的游戏化竞争性网络安全活动。它们非常适合希望开发、测试和证明自己技能的初学者和经验丰富的黑客,因为它们将黑客概念游戏化了。在
CTF
中游戏化使得学习像视频游戏一样的东西。因为游戏化很有趣并且可以让你创造性地思考,所以它是学习和发展技能的最有效的方法之一。
针对网络安全爱好者和初学者的 CTF 比赛往往具有相似的游戏机制。 在 CTF
游戏中,您和其他几位黑客将获得一个软件、一个 Web
应用程序、一个虚拟机或一个虚拟化网络作为您的目标。您的目标是在对手发现之前找到所有隐藏的旗帜。“标志”可以采用多种不同的形式,但最典型的是隐藏在文档或应用程序文件中的一串代码 ...
随着互联网和电子通信的普及,保护个人信息和数据的安全性变得至关重要。密码学成为数据保护的前沿领域,而键盘密码(也称为键盘敲击密码)作为一种古老的密码学技术,也值得我们关注。
键盘密码的工作原理
键盘密码的基本原理是通过记录用户在计算机键盘上按下的按键顺序和持续时间来创建密码。这种密码以按键的时间和顺序作为独特的标识符,然后将这些数据用作密码或密钥。例如,用户按下键盘上的字母、数字和符号,系统会记录下这些操作,并将它们转化为密码。
手机键盘密码
手机键盘加密方式,是每个数字键上有 3-4
个字母,用两位数字来表示字母,例如:ru
用手机键盘表示就是:7382,那么这里就可以知道了,手机键盘加密方式不可能用
1 开头,第二位数字不可能超过 4,解密的时候参考此
关于手机键盘加密还有另一种方式,就是「音的」式(这一点可能根据手机的不同会有所不同),具体参照手机键盘来打,例如:「数字」表示出来就是:748
94。在手机键盘上面按下这几个数,就会出:「数字」的拼音。
电脑键盘棋盘
电脑键盘棋盘加密,利用了电脑的棋盘方阵。
电脑键盘坐标
电脑键盘坐标加密,利用键盘上面的字母行和数字行来加密,例 ...
培根密码,又叫倍康尼密码,是由法兰西斯·培根发明的一种替换密码,其明文中的每个字母都会替换成
5 个字母组。
例如字母“D”被替换为“aaabb”,字母“O”被替换为“abbab”等。
培根密码的安全性并不高,因为它只是一个简单的替换密码,基本上任何破解替换密码的解密方式都可以破解培根密码。
下面是一个简单的例子:
要使用培根密码进行加密,需用到以下密码表
要加密消息,例如“STRIKENOW”,我们将明文中的字母替换为对应的 5
个字母组:
密文:baaab baaba baaaa abaaa abaab aabaa abbaa abbab babaa
然后我们可以通过重新排列密文字母,可以轻微伪装以下:
baa abb aab aba aaa aba aaab aab aab aaab baa abb abb abaa
同时如果觉得这样容易被发现,还有另外一种方法,
根据密文,书写一段特定的英文句子,将 AB
隐藏在文字中,其具体的隐藏方法是这样的,句子中的大写字母表示密文中的
B,小写字母表示密文中的 A,如下:
Hold OFf uNtIl you hEar frOm mE ...
方法一
用柠檬汁在白纸上写字,晾干纸张后,用熨斗/熨板/吹风等加热纸张,纸上就会出现褐色字迹。
原理:
柠檬中含有有机物,有机物遇热脱水会发生碳化反应。当然,纸张的主要构成物质——纤维素也是有机物,也会发生碳化。但柠檬碳化的温度要低于纸张,因此遇热时,写字部分率先碳化,呈现褐色,自然就浮现出字迹了。
葱白和柠檬汁一样在干燥的纸上写字,晾干后,纸上的字不见,然而用火烧就能出现。
方法二
将白色蜡烛当笔在白纸上写字。然后浸入水中后,原本不明显的画,变得非常清晰。
原理:
蜡不溶于水,放入水中后,周边的纸纤维浸水颜色变深,涂蜡部分会衬托出来。
方法三
也许你在电影里看到过这样的情景:间谍为了不泄露秘密,经常用“密信”的形式传递消息。如果你想要用一种最简单的方法写一封“密信”,你最好使用氯化钴制成的隐显墨水。
先配一小瓶 0.1
摩尔/升氯化钴溶液,然后用蘸水钢笔或毛笔在吸水性较好的白纸上写好“密信”。氯化钴的稀溶液是浅粉红色的,所以把氯化钴溶液写在纸上,等纸干了以后,几乎看不出纸上有什么颜色。
现在你就可以把这封“密信”寄给你的朋友了,当然信封不能用隐显墨水写,你还是用蓝墨 ...