在安全领域,无论是工业界还是学术界,紧跟研(shi)究(dai)趋(chao)势(liu)都是非常必要的工作。
大多数时候,我们凭感觉来判断当年的研究趋势(其实不是),一旦一些议题在顶尖会议上出现,我们就恍然大悟,啊今年开始流行 (划掉)研究这个了,如近几年的“威胁情报”、“零信任网络”、“对抗攻击”等等。
那么,有没有办法可以让我们再向前一步,让我们能够对一些前沿课题进行自动感知?历史上这些前沿课题又经过了怎样的生命周期呢?
这是我最近在思考的事,也是这个toy project的开端。
在这个项目里,我收集了来自18个安全会议、从1980到2020年的17,797篇security paper。让我们看看这些数据里都藏着什么秘密吧~
项目网址:https://sectrend.xinyueshen.me (用netlify做的托管,国内访问速度可能有点慢 :( 见谅 )
1. 数据收集
首先,我人工梳理了需要爬取的会议和会议对应的dblp链接。
会议列表采用顾国飞老师维护的Computer Security Conference Ranking and Statistic 只关注其中tier1(6个)和tier2(12个)的会议,共计18个会议。
level | venue | wholename | link |
---|---|---|---|
Tier 1 | S&P (Oakland) | IEEE Symposium on Security and Privacy | https://dblp.uni-trier.de/db/conf/sp/ |
Tier 1 | CCS | ACM Conference on Computer and Communications Security | https://dblp.uni-trier.de/db/conf/uss/ |
Tier 1 | Security | USENIX Security Symposium | https://dblp.uni-trier.de/db/conf/ccs/ |
Tier 1 | NDSS | ISOC Network and Distributed System Security Symposium | https://dblp.uni-trier.de/db/conf/ndss/ |
Tier 1 | Crypto | International Cryptology Conference | https://dblp.uni-trier.de/db/conf/crypto/ |
Tier 1 | Eurocrypt | European Cryptology Conference | https://dblp.uni-trier.de/db/conf/eurocrypt/ |
Tier 2 | ESORICS | European Symposium on Research in Computer Security | https://dblp.uni-trier.de/db/conf/esorics/ |
Tier 2 | RAID | International Symposium on Recent Advances in Intrusion Detection | https://dblp.uni-trier.de/db/conf/raid/ |
Tier 2 | ACSAC | Annual Computer Security Applications Conference | https://dblp.uni-trier.de/db/conf/acsac/ |
Tier 2 | DSN | The International Conference on Dependable Systems and Networks | https://dblp.uni-trier.de/db/conf/dsn/ |
Tier 2 | IMC | Internet Measurement Conference | https://dblp.uni-trier.de/db/conf/imc/ |
Tier 2 | ASIACCS | ACM Symposium on Information, Computer and Communications Security | https://dblp.uni-trier.de/db/conf/asiaccs/ |
Tier 2 | PETS | Privacy Enhancing Technologies Symposium | https://dblp.uni-trier.de/db/conf/pet/ |
Tier 2 | EuroS&P | IEEE European Symposium on Security and Privacy | https://dblp.uni-trier.de/db/conf/eurosp/ |
Tier 2 | CSF (CSFW) | IEEE Computer Security Foundations Symposium. Supersedes CSFW (Computer Security Foundations Workshop) | https://dblp.uni-trier.de/db/conf/csfw/ |
Tier 2 | Asiacrypt | International Conference on the Theory and Application of Cryptology and Information Security | https://dblp.uni-trier.de/db/conf/asiacrypt/ |
Tier 2 | TCC | Theory of Cryptography Conference | https://dblp.uni-trier.de/db/conf/tcc/ |
Tier 2 | CHES | Conference on Cryptographic Hardware and Embedded Systems | https://dblp.uni-trier.de/db/conf/ches/ |
第二步,基于人工梳理的会议链接,依次爬取这18个会议的历史论文。
dblp上的每个会议对应有多个session,每个session又对应多篇paper。故在此先爬取session对应的dblp key,再用dblp key去获取完整的论文列表。
如 要获取S&P的所有论文列表,首先访问 https://dblp.uni-trier.de/db/conf/sp/index.html 主页面获取所有session的dblp key,如 S&P 2020(conf/sp/sp2020),然后通过dblp提供的api接口:https://dblp.uni-trier.de/search/publ/api?q=toc%3Adb/conf/sp/sp2020.bht%3A&h=1000&format=json 获取这个session的全部paper
经过这一步,我们获取到了从1980-2020年,共计18个会议、529个session的17797篇paper。主要信息有session的date、title、publisher,paper的title、venue、pages、year、key、doi、author等。
venue | tier | item_cnt | paper_cnt | min(year) | max(year) | year_cnt | dblp_key_cnt |
---|---|---|---|---|---|---|---|
CCS | Tier 1 | 2179 | 2073 | 1993 | 2019 | 26 | 26 |
Crypto | Tier 1 | 1266 | 1234 | 1981 | 2012 | 32 | 32 |
Eurocrypt | Tier 1 | 1252 | 1220 | 1982 | 2014 | 33 | 32 |
NDSS | Tier 1 | 853 | 829 | 1995 | 2019 | 25 | 25 |
S&P (Oakland) | Tier 1 | 1548 | 1499 | 1980 | 2019 | 40 | 49 |
Security | Tier 1 | 1779 | 1696 | 1993 | 2019 | 25 | 83 |
ACSAC | Tier 2 | 1345 | 1304 | 1989 | 2019 | 30 | 34 |
ASIACCS | Tier 2 | 846 | 832 | 2006 | 2019 | 14 | 14 |
Asiacrypt | Tier 2 | 798 | 777 | 1990 | 2014 | 23 | 21 |
CHES | Tier 2 | 639 | 618 | 1999 | 2018 | 20 | 21 |
CSF (CSFW) | Tier 2 | 750 | 714 | 1988 | 2019 | 32 | 35 |
DSN | Tier 2 | 1936 | 1841 | 2000 | 2019 | 20 | 37 |
ESORICS | Tier 2 | 1014 | 971 | 1990 | 2020 | 25 | 43 |
EuroS&P | Tier 2 | 253 | 246 | 2016 | 2019 | 4 | 7 |
IMC | Tier 2 | 772 | 753 | 2001 | 2019 | 19 | 19 |
PETS | Tier 2 | 227 | 213 | 2002 | 2014 | 13 | 13 |
RAID | Tier 2 | 539 | 515 | 1999 | 2019 | 21 | 23 |
TCC | Tier 2 | 477 | 462 | 2004 | 2016 | 12 | 15 |
P.S. dblp的数据遵循 CC0 1.0 Public Domain Dedication license , 所有人都可对其进行复制、使用、修改、传播和进行衍生研究。dblp同时也提供了部分论文的外链,这些链接通常指向论文的发布页面或论文pdf本身,但这可能会导致版权问题。
2. 关键词抽取
标题是论文的高度概括,在这里我们直接基于标题和摘要对论文的关键词进行抽取,并进行排序。
密码学会议不在此次分析范畴内。
2.1 文本清洗
使用四个方法对文本进行清洗。
- Normalization:全部转为小写、去掉标点符号
- Tokenization:将语料拆分为多个单词
- Stop words:去掉停用词,如“the”、“a”、“an”等
- Stemming and Lemmatization:将词还原成词干或词根
原文:
"many popular programs, such as netscape, use untrusted helper applications to process data from the network. unfortunately, the unauthenticated net- work data they interpret could well have been created by an adversary, and the helper applications are usually too complex to be bug-free."
处理后:
'mani popular program netscap use untrust helper applic process data network unfortun unauthent work data interpret could well creat adversari helper applic usual complex'
2.2 TFIDF
这里我们选用TF-IDF来对关键词进行抽取。TF-IDF(Term Frequency-InversDocument Frequency)是一种常见的加权技术,由词频TF和逆文档频率IDF组成。
- TF(Term Frequency)表示某个关键词在整篇文章中出现的频率。
- IDF(InversDocument Frequency)表示逆文档频率,用于降低所有文档中一些常见却对文档影响不大的词语的作用。
sklearn里的TF-IDF计算公式为 $$TF-IDF = TF(t,d) * IDF(t)$$
TF(t,d)为关键词t在文本d中出现的频率。
$IDF(t) = log\frac{1 + n_d}{1 + DF(d,t)} + 1$
t为一个关键词,d为一个文本,$n_d$表示训练集文本数,DF(d,t)表示包含词项t的文本总数。
def keywords_extractor(level, corpus_from,tier):
data = get_corpus(level, corpus_from,tier=tier)
corpus = [i[2] for i in data]
vectorizer=CountVectorizer()
transformer=TfidfTransformer()
X=vectorizer.fit_transform(corpus)
tfidf=transformer.fit_transform(X)
word=vectorizer.get_feature_names()
weight=tfidf.toarray()
topx = 30
top_keywords_li = []
for i in range(weight.shape[0]):
sorted_keyword = sorted(zip(word, weight[i]), key=lambda x:x[1], reverse=True)
top_keywords = [w[0] for w in sorted_keyword[:topx]]
top_keywords_li.append(list(data[i][:2]) + top_keywords)
# print(top_keywords_li)
df = pd.DataFrame(top_keywords_li)
df.columns = ["%s" % level, "cnt"] + ["top%d" % i for i in range(1,topx + 1)]
df.to_csv("./nlp/top_keywords_%s_%s.csv" % (level, corpus_from), index=False)
2.3 分析
时间维度
先来看第一梯队的四大会议近40年的关键词变迁。(完整的表格数据可以在这里下载: dataset)
year | cnt | top1 | top2 | top3 | top4 | top5 | top6 | top7 | top8 | top9 | top10 |
---|---|---|---|---|---|---|---|---|---|---|---|
1980 | 19 | secur | system | preliminari | safeguard | key | data | report | cryptosystem | deceit | describ |
1981 | 18 | secur | system | protect | fund | half | lead | loaf | none | restricit | problem |
1982 | 20 | secur | allianc | blindfold | conseqeu | cryptanalyt | memoryless | neval | obm | oskar | restitut |
1983 | 21 | secur | system | encrpyt | indentif | modifi | sdc | treati | veru | problem | integ |
1984 | 26 | secur | formal | comput | system | experi | bell | congression | euclid | lapadula | mcf |
…… | |||||||||||
2013 | 381 | secur | android | attack | data | network | web | use | detect | privaci | analysi |
2014 | 407 | secur | attack | android | data | detect | malwar | privaci | web | use | analysi |
2015 | 376 | secur | attack | android | privaci | app | detect | data | vulner | code | cloud |
2016 | 459 | secur | android | attack | analysi | detect | malwar | data | mobil | network | privaci |
2017 | 502 | attack | secur | detect | android | privaci | vulner | network | learn | analysi | via |
2018 | 542 | secur | attack | learn | deep | android | detect | use | network | analysi | adversari |
2019 | 590 | attack | secur | privaci | adversari | learn | apo | neural | deep | iot | fuzz |
表格太辣眼睛,所以咱们把它转为折线图。
下面是近40年里作为关键词出现频率最高的TOP10关键词,按照出现频率排列,分别是secur, system, attack, detect, network, use, analysi, privaci, data和protocol. 通过折线图,我们可以看到——
- system这个关键词在近年的热度有所降低,network也是;
- attack和detect如孪生兄弟一样,几乎在同一时间兴起,热度曲线也相似。
- protocol在90年代中旬突起,热度一直持续到了00年代中旬。
- ……
如果我们把观察范围扩大到top11-20的关键词,可以看到更多领域的研究趋势变化。(全部图在这里: keywords)
接下来再来看看第二梯队的九个会议。笔者在这里挑选了几个更能反映单一研究领域的关键词来进行对比。
可以看到,大多时候一二梯队的关键词都在同一年份出现。有tier2会议落后tier1的情况(android),也有tier1会议落后于tier2的情况(protocol)。而当关键词在tier1的热度消失后,其在tier2可能还会存续一段时间。(全部的对比图可以在这里找到: compare,大家可以勾选自己感兴趣的关键词进行对比)
3. 其他
3.1 论文长度
随着时间变化,论文标题的长度逐渐两极分化。在1996年,论文标题的平均长度还是57,到了2020年这个数值就变成了75.
其中最短的论文标题为“Run-DMA”,发表于USENIX下属的WOOT'15,长度为7;最长的论文标题为"Security Scenario Generator (SecGen) - A Framework for Generating Randomly Vulnerable Rich-scenario VMs for Learning Computer Security and Hosting CTF Events." ,发表于USENIX下属的ASE'17,长度为158.
作者数量
无独有偶,论文署名数也有所增加。从1996年平均2.5个增加到了2019年的4.77个。最大论文作者数为20,最小为1个。论文作者数为20的这篇论文名为“Five Years of the Right to be Forgotten.”,发表于CCS'2019, 作者均来自Google,是一篇measurement,研究了五年内从Google搜索中删除的320万个URL。
子标题
由于某种神秘的力量,论文作者们似乎偏爱在论文标题处引用子标题或格言,如"I Like It, but I Hate It - Employee Perceptions Towards an Institutional Transition to BYOD Second-Factor Authentication."。那么这种论文的占比是多少呢?
可以看到,经过大家的不懈努力,子标题的使用率从1980年的10.53%,逐年提高到了2019年的31.63%,并在2012年达到最高纪录33.66%。其中被使用次数最多的谚语为“Less is More”,在2014-2019年间共被使用了3次。
相关工作
- System Security Circus 2019 : 在六个安全会议上做了大量的分析和统计,是很好的学习资料。这个项目也是受此启发诞生的。
- SecPrivMeta : 在四大顶会上做了一个topic modeling, 观察不同领域的论文发表情况和趋势变化,发表在CSET'19
最后
我把数据集和图表做成了一个简单的网站:https://sectrend.xinyueshen.me/ 国内的访问速度可能有点慢 :( 见谅
感兴趣的同学可以通过点选多选框或上方的导航来查看对应关键词的趋势变化。(如果图片没马上出现,一定是因为网速而不是bug :D
这个项目目前的分析还比较简单(打工人QAQ你懂的),后续如果有想法了我会试试去做更多的分析,画画学者的关系图之类的~ 如果你对这个项目感兴趣或是有更多想要了解的统计数据,欢迎在微博、知乎私信我(id@左左薇拉vera)